{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# records"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import vectorbt as vbt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from numba import njit\n",
    "from collections import namedtuple\n",
    "from datetime import datetime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Disable caching for performance testing\n",
    "# NOTE: Expect waterfall of executions, since some attributes depend on other attributes \n",
    "# that have to be calculated again and again\n",
    "vbt.settings.caching['enabled'] = False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "example_dt = np.dtype([\n",
    "    ('id', np.int64),\n",
    "    ('idx', np.int64),\n",
    "    ('col', np.int64),\n",
    "    ('some_field1', np.float64),\n",
    "    ('some_field2', np.float64)\n",
    "], align=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(0, 0, 0, 10., 21.) (1, 1, 0, 11., 20.) (2, 2, 0, 12., 19.)\n",
      " (3, 0, 1, 13., 18.) (4, 1, 1, 14., 17.) (5, 2, 1, 13., 18.)\n",
      " (6, 0, 2, 12., 19.) (7, 1, 2, 11., 20.) (8, 2, 2, 10., 21.)]\n",
      "(9,)\n"
     ]
    }
   ],
   "source": [
    "records_arr = np.asarray([\n",
    "    (0, 0, 0, 10, 21),\n",
    "    (1, 1, 0, 11, 20),\n",
    "    (2, 2, 0, 12, 19),\n",
    "    (3, 0, 1, 13, 18),\n",
    "    (4, 1, 1, 14, 17),\n",
    "    (5, 2, 1, 13, 18),\n",
    "    (6, 0, 2, 12, 19),\n",
    "    (7, 1, 2, 11, 20),\n",
    "    (8, 2, 2, 10, 21)\n",
    "], dtype=example_dt)\n",
    "print(records_arr)\n",
    "print(records_arr.shape)\n",
    "\n",
    "columns = pd.MultiIndex.from_arrays([[0, 1, 1, 1], ['a', 'b', 'c', 'd']], names=['lvl1', 'lvl2'])\n",
    "wrapper = vbt.ArrayWrapper(index=['x', 'y', 'z'], columns=columns, ndim=2, freq='1 days')\n",
    "records = vbt.Records(wrapper, records_arr)\n",
    "\n",
    "records_grouped = vbt.Records(wrapper.copy(group_by=0), records_arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1000000,)\n"
     ]
    }
   ],
   "source": [
    "big_records_arr = np.asarray(list(zip(*(\n",
    "    np.arange(1000000),\n",
    "    np.tile(np.arange(1000), 1000),\n",
    "    np.repeat(np.arange(1000), 1000),\n",
    "    np.random.randint(0, 100, size=1000000),\n",
    "    np.random.randint(0, 100, size=1000000)))), dtype=example_dt)\n",
    "print(big_records_arr.shape)\n",
    "\n",
    "big_columns = pd.MultiIndex.from_arrays([np.repeat(np.array([0, 1]), 500), np.arange(1000)], names=['lvl1', 'lvl2'])\n",
    "big_wrapper = vbt.ArrayWrapper(index=np.arange(1000), columns=big_columns, ndim=2, freq='1 days')\n",
    "big_records = vbt.Records(big_wrapper, big_records_arr)\n",
    "\n",
    "big_records_grouped = vbt.Records(big_wrapper.copy(group_by=0), big_records_arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(8, 2, 2, 10., 21.) (7, 1, 2, 11., 20.) (6, 0, 2, 12., 19.)\n",
      " (5, 2, 1, 13., 18.) (4, 1, 1, 14., 17.) (3, 0, 1, 13., 18.)\n",
      " (2, 2, 0, 12., 19.) (1, 1, 0, 11., 20.) (0, 0, 0, 10., 21.)]\n"
     ]
    }
   ],
   "source": [
    "records_nosort = records.copy(records_arr=records.records_arr[::-1])\n",
    "print(records_nosort.records_arr)\n",
    "\n",
    "big_records_nosort = big_records.copy(records_arr=big_records.records_arr[::-1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "group_by = pd.Series(['first', 'first', 'second', 'second'], name='group')\n",
    "big_group_by = pd.Series(np.repeat(np.array([0, 1]), 500))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## ColumnMapper"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 0 1 1 1 2 2 2]\n"
     ]
    }
   ],
   "source": [
    "print(records.col_mapper.col_arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 0 1 1 1 2 2 2]\n",
      "[0 0 0 1 1 1 1 1 1]\n",
      "7.57 µs ± 81.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.col_mapper.get_col_arr())\n",
    "print(records_grouped.col_mapper.get_col_arr())\n",
    "\n",
    "%timeit big_records_grouped.col_mapper.get_col_arr()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0  3]\n",
      " [ 3  6]\n",
      " [ 6  9]\n",
      " [-1 -1]]\n",
      "6.99 µs ± 73.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.col_mapper.col_range)\n",
    "\n",
    "%timeit big_records.col_mapper.col_range"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0  3]\n",
      " [ 3  6]\n",
      " [ 6  9]\n",
      " [-1 -1]]\n",
      "[[0 3]\n",
      " [3 9]]\n",
      "7.38 µs ± 56.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.col_mapper.get_col_range())\n",
    "print(records_grouped.col_mapper.get_col_range())\n",
    "\n",
    "%timeit big_records_grouped.col_mapper.get_col_range()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(array([0, 1, 2, 3, 4, 5, 6, 7, 8]), array([3, 3, 3, 0]))\n",
      "7.03 µs ± 22.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.col_mapper.col_map)\n",
    "\n",
    "%timeit big_records.col_mapper.col_map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(array([0, 1, 2, 3, 4, 5, 6, 7, 8]), array([3, 3, 3, 0]))\n",
      "(array([0, 1, 2, 3, 4, 5, 6, 7, 8]), array([3, 6]))\n",
      "7.43 µs ± 46.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.col_mapper.get_col_map())\n",
    "print(records_grouped.col_mapper.get_col_map())\n",
    "\n",
    "%timeit big_records_grouped.col_mapper.get_col_map()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "7.48 µs ± 48.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n",
      "False\n",
      "7.49 µs ± 8.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.col_mapper.is_sorted())\n",
    "%timeit big_records.col_mapper.is_sorted()\n",
    "\n",
    "print(records_nosort.col_mapper.is_sorted())\n",
    "%timeit big_records_nosort.col_mapper.is_sorted()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## MappedArray"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "mapped_array = records.map_field('some_field1')\n",
    "big_mapped_array = big_records.map_field('some_field1')\n",
    "\n",
    "mapped_array_nosort = records_nosort.map_field('some_field1')\n",
    "big_mapped_array_nosort = big_records_nosort.map_field('some_field1')\n",
    "\n",
    "mapped_array_grouped = records_grouped.map_field('some_field1')\n",
    "big_mapped_array_grouped = big_records_grouped.map_field('some_field1')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[10. 11. 12.]\n",
      "[0 0 0]\n",
      "MultiIndex([(0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[13. 14. 13.]\n",
      "[0 0 0]\n",
      "MultiIndex([(1, 'b')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[10. 11. 12. 10. 11. 12.]\n",
      "[0 0 0 1 1 1]\n",
      "MultiIndex([(0, 'a'),\n",
      "            (0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[10. 11. 12. 13. 14. 13.]\n",
      "[0 0 0 1 1 1]\n",
      "MultiIndex([(0, 'a'),\n",
      "            (1, 'b')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "954 µs ± 11.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "13.7 ms ± 1.09 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array[(0, 'a')].values)\n",
    "print(mapped_array[(0, 'a')].col_arr)\n",
    "print(mapped_array[(0, 'a')].wrapper.columns)\n",
    "\n",
    "print(mapped_array[(1, 'b')].values)\n",
    "print(mapped_array[(1, 'b')].col_arr)\n",
    "print(mapped_array[(1, 'b')].wrapper.columns)\n",
    "\n",
    "print(mapped_array[[(0, 'a'), (0, 'a')]].values)\n",
    "print(mapped_array[[(0, 'a'), (0, 'a')]].col_arr)\n",
    "print(mapped_array[[(0, 'a'), (0, 'a')]].wrapper.columns)\n",
    "\n",
    "print(mapped_array[[(0, 'a'), (1, 'b')]].values)\n",
    "print(mapped_array[[(0, 'a'), (1, 'b')]].col_arr)\n",
    "print(mapped_array[[(0, 'a'), (1, 'b')]].wrapper.columns)\n",
    "\n",
    "%timeit big_mapped_array.iloc[0]\n",
    "%timeit big_mapped_array.iloc[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[12. 11. 10.]\n",
      "[0 0 0]\n",
      "MultiIndex([(0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[13. 14. 13.]\n",
      "[0 0 0]\n",
      "MultiIndex([(1, 'b')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[12. 11. 10. 12. 11. 10.]\n",
      "[0 0 0 1 1 1]\n",
      "MultiIndex([(0, 'a'),\n",
      "            (0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[12. 11. 10. 13. 14. 13.]\n",
      "[0 0 0 1 1 1]\n",
      "MultiIndex([(0, 'a'),\n",
      "            (1, 'b')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "954 µs ± 7.38 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "14.2 ms ± 448 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array_nosort[(0, 'a')].values)\n",
    "print(mapped_array_nosort[(0, 'a')].col_arr)\n",
    "print(mapped_array_nosort[(0, 'a')].wrapper.columns)\n",
    "\n",
    "print(mapped_array_nosort[(1, 'b')].values)\n",
    "print(mapped_array_nosort[(1, 'b')].col_arr)\n",
    "print(mapped_array_nosort[(1, 'b')].wrapper.columns)\n",
    "\n",
    "print(mapped_array_nosort[[(0, 'a'), (0, 'a')]].values)\n",
    "print(mapped_array_nosort[[(0, 'a'), (0, 'a')]].col_arr)\n",
    "print(mapped_array_nosort[[(0, 'a'), (0, 'a')]].wrapper.columns)\n",
    "\n",
    "print(mapped_array_nosort[[(0, 'a'), (1, 'b')]].values)\n",
    "print(mapped_array_nosort[[(0, 'a'), (1, 'b')]].col_arr)\n",
    "print(mapped_array_nosort[[(0, 'a'), (1, 'b')]].wrapper.columns)\n",
    "\n",
    "%timeit big_mapped_array_nosort.iloc[0]\n",
    "%timeit big_mapped_array_nosort.iloc[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MultiIndex([(0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "1\n",
      "1\n",
      "Index([0], dtype='int64', name='lvl1')\n",
      "MultiIndex([(1, 'b'),\n",
      "            (1, 'c'),\n",
      "            (1, 'd')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "2\n",
      "1\n",
      "Index([1, 1, 1], dtype='int64', name='lvl1')\n",
      "MultiIndex([(0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "2\n",
      "2\n",
      "Index([0], dtype='int64', name='lvl1')\n",
      "MultiIndex([(0, 'a'),\n",
      "            (1, 'b'),\n",
      "            (1, 'c'),\n",
      "            (1, 'd')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "2\n",
      "2\n",
      "Index([0, 1, 1, 1], dtype='int64', name='lvl1')\n",
      "5.57 ms ± 375 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "12.1 ms ± 451 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array_grouped[0].wrapper.columns)  # indexing on groups, not columns!\n",
    "print(mapped_array_grouped[0].wrapper.ndim)\n",
    "print(mapped_array_grouped[0].wrapper.grouped_ndim)\n",
    "print(mapped_array_grouped[0].wrapper.grouper.group_by)\n",
    "\n",
    "print(mapped_array_grouped[1].wrapper.columns)\n",
    "print(mapped_array_grouped[1].wrapper.ndim)\n",
    "print(mapped_array_grouped[1].wrapper.grouped_ndim)\n",
    "print(mapped_array_grouped[1].wrapper.grouper.group_by)\n",
    "\n",
    "print(mapped_array_grouped[[0]].wrapper.columns)\n",
    "print(mapped_array_grouped[[0]].wrapper.ndim)\n",
    "print(mapped_array_grouped[[0]].wrapper.grouped_ndim)\n",
    "print(mapped_array_grouped[[0]].wrapper.grouper.group_by)\n",
    "\n",
    "print(mapped_array_grouped[[0, 1]].wrapper.columns)\n",
    "print(mapped_array_grouped[[0, 1]].wrapper.ndim)\n",
    "print(mapped_array_grouped[[0, 1]].wrapper.grouped_ndim)\n",
    "print(mapped_array_grouped[[0, 1]].wrapper.grouper.group_by)\n",
    "\n",
    "%timeit big_mapped_array_grouped.iloc[0]\n",
    "%timeit big_mapped_array_grouped.iloc[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['x', 'y', 'z'], dtype='object')\n",
      "MultiIndex([(0, 'a'),\n",
      "            (1, 'b'),\n",
      "            (1, 'c'),\n",
      "            (1, 'd')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "2\n",
      "None\n",
      "Index(['x', 'y', 'z'], dtype='object')\n",
      "MultiIndex([(0, 'a'),\n",
      "            (1, 'b'),\n",
      "            (1, 'c'),\n",
      "            (1, 'd')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "2\n",
      "Index([0, 1, 1, 1], dtype='int64', name='lvl1')\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.wrapper.index)\n",
    "print(mapped_array.wrapper.columns)\n",
    "print(mapped_array.wrapper.ndim)\n",
    "print(mapped_array.wrapper.grouper.group_by)\n",
    "\n",
    "print(mapped_array_grouped.wrapper.index)\n",
    "print(mapped_array_grouped.wrapper.columns)\n",
    "print(mapped_array_grouped.wrapper.ndim)\n",
    "print(mapped_array_grouped.wrapper.grouper.group_by)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[10. 11. 12. 13. 14. 13. 12. 11. 10.]\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 0 1 1 1 2 2 2]\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.col_arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 2 3 4 5 6 7 8]\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.id_arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 2 0 1 2 0 1 2]\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.idx_arr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "1.04 ms ± 7.48 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "False\n",
      "7.84 µs ± 31 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n",
      "True\n",
      "1.58 ms ± 65.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "False\n",
      "6.99 µs ± 20.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.is_sorted())\n",
    "%timeit big_mapped_array.is_sorted()\n",
    "\n",
    "print(mapped_array_nosort.is_sorted())\n",
    "%timeit big_mapped_array_nosort.is_sorted()\n",
    "\n",
    "print(mapped_array.is_sorted(incl_id=True))\n",
    "%timeit big_mapped_array.is_sorted(incl_id=True)\n",
    "\n",
    "print(mapped_array_nosort.is_sorted(incl_id=True))\n",
    "%timeit big_mapped_array_nosort.is_sorted(incl_id=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 0 1 1 1 2 2 2]\n",
      "[0 1 2 3 4 5 6 7 8]\n",
      "1.41 ms ± 48.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "[0 0 0 1 1 1 2 2 2]\n",
      "[2 1 0 5 4 3 8 7 6]\n",
      "20.1 ms ± 544 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "[0 0 0 1 1 1 2 2 2]\n",
      "[0 1 2 3 4 5 6 7 8]\n",
      "1.91 ms ± 3.77 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "[0 0 0 1 1 1 2 2 2]\n",
      "[0 1 2 3 4 5 6 7 8]\n",
      "16.1 ms ± 1.42 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.sort().col_arr)\n",
    "print(mapped_array.sort().id_arr)\n",
    "%timeit big_mapped_array.sort()\n",
    "\n",
    "print(mapped_array_nosort.sort().col_arr)\n",
    "print(mapped_array_nosort.sort().id_arr)\n",
    "%timeit big_mapped_array_nosort.sort()\n",
    "\n",
    "print(mapped_array.sort(incl_id=True).col_arr)\n",
    "print(mapped_array.sort(incl_id=True).id_arr)\n",
    "%timeit big_mapped_array.sort(incl_id=True)\n",
    "\n",
    "print(mapped_array_nosort.sort(incl_id=True).col_arr)\n",
    "print(mapped_array_nosort.sort(incl_id=True).id_arr)\n",
    "%timeit big_mapped_array_nosort.sort(incl_id=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[12. 13. 14. 13. 12.]\n",
      "18.2 ms ± 487 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "17.9 ms ± 143 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "mask = mapped_array.values >= mapped_array.values.mean()\n",
    "print(mapped_array.apply_mask(mask).values)\n",
    "\n",
    "big_mask = big_mapped_array.values >= big_mapped_array.values.mean()\n",
    "%timeit big_mapped_array.apply_mask(big_mask)\n",
    "%timeit big_mapped_array_nosort.apply_mask(big_mask)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ True False  True  True False  True  True False  True]\n",
      "1.11 ms ± 3.83 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "1.64 ms ± 43.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "@njit\n",
    "def every_2_nb(inout, idxs, col, mapped_arr):\n",
    "    inout[idxs[::2]] = True\n",
    "\n",
    "print(mapped_array.map_to_mask(every_2_nb))\n",
    "%timeit big_mapped_array.map_to_mask(every_2_nb)\n",
    "%timeit big_mapped_array_nosort.map_to_mask(every_2_nb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[10. 11. 12. 13. 14. 13. 12. 11. 10.]\n",
      "[False False  True False  True False  True False False]\n",
      "50.8 ms ± 76.3 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "[ True False False  True False False False False  True]\n",
      "51.6 ms ± 358 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.values)\n",
    "\n",
    "print(mapped_array.top_n_mask(1))\n",
    "%timeit big_mapped_array.top_n_mask(100)\n",
    "\n",
    "print(mapped_array.bottom_n_mask(1))\n",
    "%timeit big_mapped_array.bottom_n_mask(100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[12. 14. 12.]\n",
      "61.2 ms ± 642 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "[10. 13. 10.]\n",
      "59.6 ms ± 362 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.top_n(1).values)\n",
    "%timeit big_mapped_array.top_n(100)\n",
    "\n",
    "print(mapped_array.bottom_n(1).values)\n",
    "%timeit big_mapped_array.bottom_n(100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "2.44 ms ± 11.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.is_expandable())\n",
    "\n",
    "%timeit big_mapped_array.is_expandable()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1     0     1          \n",
      "lvl2     a     b     c   d\n",
      "x     10.0  13.0  12.0 NaN\n",
      "y     11.0  14.0  11.0 NaN\n",
      "z     12.0  13.0  10.0 NaN\n",
      "lvl1     0     1           \n",
      "lvl2     a     b     c    d\n",
      "x     10.0  13.0  12.0  0.0\n",
      "y     11.0  14.0  11.0  0.0\n",
      "z     12.0  13.0  10.0  0.0\n",
      "5.41 ms ± 239 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.to_pd())\n",
    "print(mapped_array.to_pd(fill_value=0.))\n",
    "\n",
    "%timeit big_mapped_array.to_pd()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    10.0\n",
      "1    11.0\n",
      "2    12.0\n",
      "Name: (0, a), dtype: float64\n",
      "8.29 ms ± 1.09 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
      "lvl1     0     1          \n",
      "lvl2     a     b     c   d\n",
      "0     10.0  13.0  12.0 NaN\n",
      "1     11.0  14.0  11.0 NaN\n",
      "2     12.0  13.0  10.0 NaN\n",
      "3.48 ms ± 202 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1     0     1\n",
      "0     10.0  13.0\n",
      "1     11.0  14.0\n",
      "2     12.0  13.0\n",
      "3      NaN  12.0\n",
      "4      NaN  11.0\n",
      "5      NaN  10.0\n",
      "lvl1     0     1\n",
      "0     10.0  13.0\n",
      "1     11.0  14.0\n",
      "2     12.0  13.0\n",
      "3      0.0  12.0\n",
      "4      0.0  11.0\n",
      "5      0.0  10.0\n",
      "3.34 ms ± 79.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array[(0, 'a')].to_pd(ignore_index=True))\n",
    "%timeit big_mapped_array[0].to_pd(ignore_index=True)\n",
    "\n",
    "print(mapped_array.to_pd(ignore_index=True))\n",
    "%timeit big_mapped_array.to_pd(ignore_index=True)\n",
    "\n",
    "print(mapped_array_grouped.to_pd(ignore_index=True))\n",
    "print(mapped_array_grouped.to_pd(ignore_index=True, fill_value=0))\n",
    "%timeit big_mapped_array_grouped.to_pd(ignore_index=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11.0\n",
      "lvl1  lvl2\n",
      "0     a       11.000000\n",
      "1     b       13.333333\n",
      "Name: reduce, dtype: float64\n",
      "lvl1  lvl2\n",
      "0     a       11.000000\n",
      "1     b       13.333333\n",
      "      c       11.000000\n",
      "      d             NaN\n",
      "Name: reduce, dtype: float64\n",
      "lvl1  lvl2\n",
      "0     a       11.000000\n",
      "1     b       13.333333\n",
      "      c       11.000000\n",
      "      d        0.000000\n",
      "Name: reduce, dtype: float64\n",
      "lvl1  lvl2\n",
      "0     a       11.000000\n",
      "1     b       13.333333\n",
      "      c       11.000000\n",
      "      d        0.000000\n",
      "Name: reduce, dtype: float64\n",
      "lvl1  lvl2\n",
      "0     a      11 days 00:00:00\n",
      "1     b      13 days 08:00:00\n",
      "      c      11 days 00:00:00\n",
      "      d                   NaT\n",
      "Name: reduce, dtype: timedelta64[ns]\n",
      "2.07 ms ± 18.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "2.52 ms ± 38 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "@njit\n",
    "def mean_reduce_nb(col, a):\n",
    "    return np.mean(a)\n",
    "\n",
    "print(mapped_array[(0, 'a')].reduce(mean_reduce_nb))\n",
    "print(mapped_array[[(0, 'a'), (1, 'b')]].reduce(mean_reduce_nb))\n",
    "print(mapped_array.reduce(mean_reduce_nb))\n",
    "print(mapped_array.reduce(mean_reduce_nb, fill_value=0.))\n",
    "print(mapped_array.reduce(mean_reduce_nb, fill_value=0., wrap_kwargs=dict(dtype=np.int64)))\n",
    "print(mapped_array.reduce(mean_reduce_nb, wrap_kwargs=dict(to_timedelta=True)))\n",
    "\n",
    "%timeit big_mapped_array.reduce(mean_reduce_nb)\n",
    "%timeit big_mapped_array_nosort.reduce(mean_reduce_nb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11.0\n",
      "lvl1\n",
      "0    11.0\n",
      "Name: reduce, dtype: float64\n",
      "lvl1\n",
      "0    11.000000\n",
      "1    12.166667\n",
      "Name: reduce, dtype: float64\n",
      "lvl1  lvl2\n",
      "0     a       11.000000\n",
      "1     b       13.333333\n",
      "      c       11.000000\n",
      "      d             NaN\n",
      "Name: reduce, dtype: float64\n",
      "2.13 ms ± 141 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array_grouped[0].reduce(mean_reduce_nb))\n",
    "print(mapped_array_grouped[[0]].reduce(mean_reduce_nb))\n",
    "print(mapped_array_grouped.reduce(mean_reduce_nb))\n",
    "print(mapped_array_grouped.reduce(mean_reduce_nb, group_by=False))\n",
    "\n",
    "%timeit big_mapped_array_grouped.reduce(mean_reduce_nb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a         x\n",
      "1     b         x\n",
      "      c         z\n",
      "      d       NaN\n",
      "Name: reduce, dtype: object\n",
      "3.9 ms ± 76.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  lvl2\n",
      "0     a       0\n",
      "1     b       0\n",
      "      c       2\n",
      "      d      -1\n",
      "Name: reduce, dtype: int64\n",
      "2.89 ms ± 113 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1\n",
      "0    x\n",
      "1    z\n",
      "Name: reduce, dtype: object\n",
      "3.15 ms ± 100 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "@njit\n",
    "def argmin_reduce_nb(col, a):\n",
    "    return np.argmin(a)\n",
    "\n",
    "print(mapped_array.reduce(argmin_reduce_nb, returns_idx=True))\n",
    "%timeit big_mapped_array.reduce(argmin_reduce_nb, returns_idx=True)\n",
    "\n",
    "print(mapped_array.reduce(argmin_reduce_nb, returns_idx=True, to_index=False))\n",
    "%timeit big_mapped_array.reduce(argmin_reduce_nb, returns_idx=True, to_index=False)\n",
    "\n",
    "print(mapped_array_grouped.reduce(argmin_reduce_nb, returns_idx=True))\n",
    "%timeit big_mapped_array_grouped.reduce(argmin_reduce_nb, returns_idx=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    10.0\n",
      "1    12.0\n",
      "Name: (0, a), dtype: float64\n",
      "lvl1     0     1\n",
      "lvl2     a     b\n",
      "0     10.0  13.0\n",
      "1     12.0  14.0\n",
      "lvl1     0     1          \n",
      "lvl2     a     b     c   d\n",
      "0     10.0  13.0  10.0 NaN\n",
      "1     12.0  14.0  12.0 NaN\n",
      "lvl1     0     1          \n",
      "lvl2     a     b     c   d\n",
      "min   10.0  13.0  10.0 NaN\n",
      "max   12.0  14.0  12.0 NaN\n",
      "lvl1     0     1           \n",
      "lvl2     a     b     c    d\n",
      "min   10.0  13.0  10.0  0.0\n",
      "max   12.0  14.0  12.0  0.0\n",
      "lvl1       0       1            \n",
      "lvl2       a       b       c   d\n",
      "0    10 days 13 days 10 days NaT\n",
      "1    12 days 14 days 12 days NaT\n",
      "2.45 ms ± 12.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "@njit\n",
    "def min_max_reduce_nb(col, a):\n",
    "    return np.array([np.min(a), np.max(a)])\n",
    "\n",
    "print(mapped_array[(0, 'a')].reduce(min_max_reduce_nb, returns_array=True))\n",
    "print(mapped_array[[(0, 'a'), (1, 'b')]].reduce(min_max_reduce_nb, returns_array=True))\n",
    "print(mapped_array.reduce(min_max_reduce_nb, returns_array=True))\n",
    "print(mapped_array.reduce(min_max_reduce_nb, returns_array=True, wrap_kwargs=dict(name_or_index=['min', 'max'])))\n",
    "print(mapped_array.reduce(min_max_reduce_nb, returns_array=True, wrap_kwargs=dict(name_or_index=['min', 'max']), fill_value=0.))\n",
    "print(mapped_array.reduce(min_max_reduce_nb, returns_array=True, wrap_kwargs=dict(to_timedelta=True)))\n",
    "\n",
    "%timeit big_mapped_array.reduce(min_max_reduce_nb, returns_array=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    10.0\n",
      "1    12.0\n",
      "dtype: float64\n",
      "lvl1     0\n",
      "0     10.0\n",
      "1     12.0\n",
      "lvl1     0     1\n",
      "0     10.0  10.0\n",
      "1     12.0  14.0\n",
      "lvl1     0     1          \n",
      "lvl2     a     b     c   d\n",
      "0     10.0  13.0  10.0 NaN\n",
      "1     12.0  14.0  12.0 NaN\n",
      "2.38 ms ± 3.66 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array_grouped[0].reduce(min_max_reduce_nb, returns_array=True))\n",
    "print(mapped_array_grouped[[0]].reduce(min_max_reduce_nb, returns_array=True))\n",
    "print(mapped_array_grouped.reduce(min_max_reduce_nb, returns_array=True))\n",
    "print(mapped_array_grouped.reduce(min_max_reduce_nb, returns_array=True, group_by=False))\n",
    "\n",
    "%timeit big_mapped_array_grouped.reduce(min_max_reduce_nb, returns_array=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  0  1       \n",
      "lvl2  a  b  c   d\n",
      "0     x  x  z NaN\n",
      "1     z  y  x NaN\n",
      "82.4 ms ± 388 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "lvl1  0  1      \n",
      "lvl2  a  b  c  d\n",
      "0     0  0  2 -1\n",
      "1     2  1  0 -1\n",
      "4.04 ms ± 17.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  0  1\n",
      "0     x  z\n",
      "1     z  y\n",
      "4.45 ms ± 3.78 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "@njit\n",
    "def idxmin_idxmax_reduce_nb(col, a):\n",
    "    return np.array([np.argmin(a), np.argmax(a)])\n",
    "\n",
    "print(mapped_array.reduce(idxmin_idxmax_reduce_nb, returns_array=True, returns_idx=True))\n",
    "%timeit big_mapped_array.reduce(idxmin_idxmax_reduce_nb, returns_array=True, returns_idx=True)\n",
    "\n",
    "print(mapped_array.reduce(idxmin_idxmax_reduce_nb, returns_array=True, returns_idx=True, to_index=False))\n",
    "%timeit big_mapped_array.reduce(idxmin_idxmax_reduce_nb, returns_array=True, returns_idx=True, to_index=False)\n",
    "\n",
    "print(mapped_array_grouped.reduce(idxmin_idxmax_reduce_nb, returns_array=True, returns_idx=True))\n",
    "%timeit big_mapped_array_grouped.reduce(idxmin_idxmax_reduce_nb, returns_array=True, returns_idx=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a       10.0\n",
      "1     b       13.0\n",
      "      c       12.0\n",
      "      d        NaN\n",
      "Name: nth, dtype: float64\n",
      "lvl1  lvl2\n",
      "0     a       12.0\n",
      "1     b       13.0\n",
      "      c       10.0\n",
      "      d        NaN\n",
      "Name: nth, dtype: float64\n",
      "1.03 ms ± 1.44 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "lvl1\n",
      "0    10.0\n",
      "1    13.0\n",
      "Name: nth, dtype: float64\n",
      "1.11 ms ± 3.55 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.nth(0))\n",
    "print(mapped_array.nth(-1))\n",
    "%timeit big_mapped_array.nth(0)\n",
    "\n",
    "print(mapped_array_grouped.nth(0))\n",
    "%timeit big_mapped_array_grouped.nth(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a       10.0\n",
      "1     b       13.0\n",
      "      c       10.0\n",
      "      d        NaN\n",
      "Name: min, dtype: float64\n",
      "10.1 ms ± 458 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  lvl2\n",
      "0     a       10.0\n",
      "1     b       13.0\n",
      "      c       10.0\n",
      "      d        NaN\n",
      "Name: min, dtype: float64\n",
      "2.98 ms ± 4.29 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1\n",
      "0    10.0\n",
      "1    10.0\n",
      "Name: min, dtype: float64\n",
      "3.02 ms ± 5.68 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.to_pd().vbt.min())\n",
    "%timeit big_mapped_array.to_pd().vbt.min()\n",
    "\n",
    "print(mapped_array.min())\n",
    "%timeit big_mapped_array.min()\n",
    "\n",
    "print(mapped_array_grouped.min())\n",
    "%timeit big_mapped_array_grouped.min()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a       12.0\n",
      "1     b       14.0\n",
      "      c       12.0\n",
      "      d        NaN\n",
      "Name: max, dtype: float64\n",
      "9.97 ms ± 92 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  lvl2\n",
      "0     a       12.0\n",
      "1     b       14.0\n",
      "      c       12.0\n",
      "      d        NaN\n",
      "Name: max, dtype: float64\n",
      "2.98 ms ± 6.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1\n",
      "0    12.0\n",
      "1    14.0\n",
      "Name: max, dtype: float64\n",
      "3.03 ms ± 3.58 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.to_pd().vbt.max())\n",
    "%timeit big_mapped_array.to_pd().vbt.max()\n",
    "\n",
    "print(mapped_array.max())\n",
    "%timeit big_mapped_array.max()\n",
    "\n",
    "print(mapped_array_grouped.max())\n",
    "%timeit big_mapped_array_grouped.max()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a       11.000000\n",
      "1     b       13.333333\n",
      "      c       11.000000\n",
      "      d             NaN\n",
      "Name: mean, dtype: float64\n",
      "8.4 ms ± 336 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  lvl2\n",
      "0     a       11.000000\n",
      "1     b       13.333333\n",
      "      c       11.000000\n",
      "      d             NaN\n",
      "Name: mean, dtype: float64\n",
      "3.27 ms ± 10.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1\n",
      "0    11.000000\n",
      "1    12.166667\n",
      "Name: mean, dtype: float64\n",
      "3.32 ms ± 5.36 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.to_pd().vbt.mean())\n",
    "%timeit big_mapped_array.to_pd().vbt.mean()\n",
    "\n",
    "print(mapped_array.mean())\n",
    "%timeit big_mapped_array.mean()\n",
    "\n",
    "print(mapped_array_grouped.mean())\n",
    "%timeit big_mapped_array_grouped.mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a       11.0\n",
      "1     b       13.0\n",
      "      c       11.0\n",
      "      d        NaN\n",
      "Name: median, dtype: float64\n",
      "16.9 ms ± 151 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  lvl2\n",
      "0     a       11.0\n",
      "1     b       13.0\n",
      "      c       11.0\n",
      "      d        NaN\n",
      "Name: median, dtype: float64\n",
      "12.5 ms ± 7.77 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1\n",
      "0    11.0\n",
      "1    12.5\n",
      "Name: median, dtype: float64\n",
      "11.7 ms ± 13.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.to_pd().vbt.median())\n",
    "%timeit big_mapped_array.to_pd().vbt.median()\n",
    "\n",
    "print(mapped_array.median())\n",
    "%timeit big_mapped_array.median()\n",
    "\n",
    "print(mapped_array_grouped.median())\n",
    "%timeit big_mapped_array_grouped.median()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a       1.00000\n",
      "1     b       0.57735\n",
      "      c       1.00000\n",
      "      d           NaN\n",
      "Name: std, dtype: float64\n",
      "lvl1  lvl2\n",
      "0     a       0.816497\n",
      "1     b       0.471405\n",
      "      c       0.816497\n",
      "      d            NaN\n",
      "Name: std, dtype: float64\n",
      "8.7 ms ± 23.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  lvl2\n",
      "0     a       1.00000\n",
      "1     b       0.57735\n",
      "      c       1.00000\n",
      "      d           NaN\n",
      "Name: std, dtype: float64\n",
      "lvl1  lvl2\n",
      "0     a       0.816497\n",
      "1     b       0.471405\n",
      "      c       0.816497\n",
      "      d            NaN\n",
      "Name: std, dtype: float64\n",
      "6.59 ms ± 134 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1\n",
      "0    1.00000\n",
      "1    1.47196\n",
      "Name: std, dtype: float64\n",
      "6.24 ms ± 3.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.to_pd().vbt.std())\n",
    "print(mapped_array.to_pd().vbt.std(ddof=0))\n",
    "%timeit big_mapped_array.to_pd().vbt.std()\n",
    "\n",
    "print(mapped_array.std())\n",
    "print(mapped_array.std(ddof=0))\n",
    "%timeit big_mapped_array.std()\n",
    "\n",
    "print(mapped_array_grouped.std())\n",
    "%timeit big_mapped_array_grouped.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a       33.0\n",
      "1     b       40.0\n",
      "      c       33.0\n",
      "      d        0.0\n",
      "Name: sum, dtype: float64\n",
      "8.63 ms ± 36.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  lvl2\n",
      "0     a       33.0\n",
      "1     b       40.0\n",
      "      c       33.0\n",
      "      d        0.0\n",
      "Name: sum, dtype: float64\n",
      "3.26 ms ± 6.28 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1\n",
      "0    33.0\n",
      "1    73.0\n",
      "Name: sum, dtype: float64\n",
      "3.31 ms ± 3.33 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.to_pd().vbt.sum())\n",
    "%timeit big_mapped_array.to_pd().vbt.sum()\n",
    "\n",
    "print(mapped_array.sum())\n",
    "%timeit big_mapped_array.sum()\n",
    "\n",
    "print(mapped_array_grouped.sum())\n",
    "%timeit big_mapped_array_grouped.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a         x\n",
      "1     b         x\n",
      "      c         z\n",
      "      d       NaN\n",
      "Name: idxmin, dtype: object\n",
      "9.22 ms ± 130 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  lvl2\n",
      "0     a         x\n",
      "1     b         x\n",
      "      c         z\n",
      "      d       NaN\n",
      "Name: idxmin, dtype: object\n",
      "4.86 ms ± 28.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1\n",
      "0    x\n",
      "1    z\n",
      "Name: idxmin, dtype: object\n",
      "4.21 ms ± 7.54 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.to_pd().vbt.idxmin())\n",
    "%timeit big_mapped_array.to_pd().vbt.idxmin()\n",
    "\n",
    "print(mapped_array.idxmin())\n",
    "%timeit big_mapped_array.idxmin()\n",
    "\n",
    "print(mapped_array_grouped.idxmin())\n",
    "%timeit big_mapped_array_grouped.idxmin()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a         z\n",
      "1     b         y\n",
      "      c         x\n",
      "      d       NaN\n",
      "Name: idxmax, dtype: object\n",
      "9.4 ms ± 395 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  lvl2\n",
      "0     a         z\n",
      "1     b         y\n",
      "      c         x\n",
      "      d       NaN\n",
      "Name: idxmax, dtype: object\n",
      "4.88 ms ± 41.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1\n",
      "0    z\n",
      "1    y\n",
      "Name: idxmax, dtype: object\n",
      "4.22 ms ± 7.03 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.to_pd().vbt.idxmax())\n",
    "%timeit big_mapped_array.to_pd().vbt.idxmax()\n",
    "\n",
    "print(mapped_array.idxmax())\n",
    "%timeit big_mapped_array.idxmax()\n",
    "\n",
    "print(mapped_array_grouped.idxmax())\n",
    "%timeit big_mapped_array_grouped.idxmax()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1      0          1           \n",
      "lvl2      a          b     c    d\n",
      "count   3.0   3.000000   3.0  0.0\n",
      "mean   11.0  13.333333  11.0  NaN\n",
      "std     1.0   0.577350   1.0  NaN\n",
      "min    10.0  13.000000  10.0  NaN\n",
      "25%    10.5  13.000000  10.5  NaN\n",
      "50%    11.0  13.000000  11.0  NaN\n",
      "75%    11.5  13.500000  11.5  NaN\n",
      "max    12.0  14.000000  12.0  NaN\n",
      "lvl1      0          1           \n",
      "lvl2      a          b     c    d\n",
      "count   3.0   3.000000   3.0  0.0\n",
      "mean   11.0  13.333333  11.0  NaN\n",
      "std     1.0   0.577350   1.0  NaN\n",
      "min    10.0  13.000000  10.0  NaN\n",
      "30%    10.6  13.000000  10.6  NaN\n",
      "50%    11.0  13.000000  11.0  NaN\n",
      "70%    11.4  13.400000  11.4  NaN\n",
      "max    12.0  14.000000  12.0  NaN\n",
      "41.4 ms ± 24.4 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "lvl1      0          1           \n",
      "lvl2      a          b     c    d\n",
      "count   3.0   3.000000   3.0  0.0\n",
      "mean   11.0  13.333333  11.0  NaN\n",
      "std     1.0   0.577350   1.0  NaN\n",
      "min    10.0  13.000000  10.0  NaN\n",
      "25%    10.5  13.000000  10.5  NaN\n",
      "50%    11.0  13.000000  11.0  NaN\n",
      "75%    11.5  13.500000  11.5  NaN\n",
      "max    12.0  14.000000  12.0  NaN\n",
      "lvl1      0          1           \n",
      "lvl2      a          b     c    d\n",
      "count   3.0   3.000000   3.0  0.0\n",
      "mean   11.0  13.333333  11.0  NaN\n",
      "std     1.0   0.577350   1.0  NaN\n",
      "min    10.0  13.000000  10.0  NaN\n",
      "30%    10.6  13.000000  10.6  NaN\n",
      "50%    11.0  13.000000  11.0  NaN\n",
      "70%    11.4  13.400000  11.4  NaN\n",
      "max    12.0  14.000000  12.0  NaN\n",
      "35.6 ms ± 432 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "lvl1      0          1\n",
      "count   3.0   6.000000\n",
      "mean   11.0  12.166667\n",
      "std     1.0   1.471960\n",
      "min    10.0  10.000000\n",
      "25%    10.5  11.250000\n",
      "50%    11.0  12.500000\n",
      "75%    11.5  13.000000\n",
      "max    12.0  14.000000\n",
      "37.9 ms ± 123 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.to_pd().vbt.describe())\n",
    "print(mapped_array.to_pd().vbt.describe(percentiles=[0.3, 0.7]))\n",
    "%timeit big_mapped_array.to_pd().vbt.describe()\n",
    "\n",
    "print(mapped_array.describe())\n",
    "print(mapped_array.describe(percentiles=[0.3, 0.7]))\n",
    "%timeit big_mapped_array.describe()\n",
    "\n",
    "print(mapped_array_grouped.describe())\n",
    "%timeit big_mapped_array_grouped.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a       3\n",
      "1     b       3\n",
      "      c       3\n",
      "      d       0\n",
      "Name: count, dtype: int64\n",
      "7.45 ms ± 215 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  lvl2\n",
      "0     a       3\n",
      "1     b       3\n",
      "      c       3\n",
      "      d       0\n",
      "Name: count, dtype: int64\n",
      "49.6 µs ± 200 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n",
      "lvl1\n",
      "0    3\n",
      "1    6\n",
      "Name: count, dtype: int64\n",
      "48.3 µs ± 83.7 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array.to_pd().vbt.count())\n",
    "%timeit big_mapped_array.to_pd().vbt.count()\n",
    "\n",
    "print(mapped_array.count())\n",
    "%timeit big_mapped_array.count()\n",
    "\n",
    "print(mapped_array_grouped.count())\n",
    "%timeit big_mapped_array_grouped.count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "mapping = {x: str(x) for x in np.unique(mapped_array.values)}\n",
    "big_mapping = {x: str(x) for x in np.unique(big_mapped_array.values)}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10.0    1\n",
      "11.0    1\n",
      "12.0    1\n",
      "Name: (0, a), dtype: int64\n",
      "13.4 ms ± 584 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "10.0    1\n",
      "11.0    1\n",
      "12.0    1\n",
      "Name: (0, a), dtype: int64\n",
      "12.9 ms ± 353 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  0  1      \n",
      "lvl2  a  b  c  d\n",
      "10.0  1  0  1  0\n",
      "11.0  1  0  1  0\n",
      "12.0  1  0  1  0\n",
      "13.0  0  2  0  0\n",
      "14.0  0  1  0  0\n",
      "10.9 ms ± 23.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  0  1      \n",
      "lvl2  a  b  c  d\n",
      "10.0  1  0  1  0\n",
      "11.0  1  0  1  0\n",
      "12.0  1  0  1  0\n",
      "13.0  0  2  0  0\n",
      "14.0  0  1  0  0\n",
      "11.2 ms ± 121 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "lvl1  0  1\n",
      "10.0  1  1\n",
      "11.0  1  1\n",
      "12.0  1  1\n",
      "13.0  0  2\n",
      "14.0  0  1\n",
      "10.9 ms ± 451 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array[(0, 'a')].value_counts())\n",
    "%timeit big_mapped_array[0].value_counts()\n",
    "\n",
    "print(mapped_array[(0, 'a')].value_counts(mapping=mapping))\n",
    "%timeit big_mapped_array[0].value_counts(mapping=big_mapping)\n",
    "\n",
    "print(mapped_array.value_counts())\n",
    "%timeit big_mapped_array.value_counts()\n",
    "\n",
    "print(mapped_array.value_counts(mapping=mapping))\n",
    "%timeit big_mapped_array.value_counts(mapping=big_mapping)\n",
    "\n",
    "print(mapped_array_grouped.value_counts())\n",
    "%timeit big_mapped_array_grouped.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Start                      x\n",
      "End                        z\n",
      "Period       3 days 00:00:00\n",
      "Count                      3\n",
      "Mean                    11.0\n",
      "Std                      1.0\n",
      "Min                     10.0\n",
      "Median                  11.0\n",
      "Max                     12.0\n",
      "Min Index                  x\n",
      "Max Index                  z\n",
      "Name: (0, a), dtype: object\n",
      "29 ms ± 287 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "Start                      x\n",
      "End                        z\n",
      "Period       3 days 00:00:00\n",
      "Count                      3\n",
      "Mean                    11.0\n",
      "Std                      1.0\n",
      "Min                     10.0\n",
      "Median                  11.0\n",
      "Max                     12.0\n",
      "Min Index                  x\n",
      "Max Index                  z\n",
      "Name: (0, a), dtype: object\n",
      "46 ms ± 1.01 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "Start                   x\n",
      "End                     z\n",
      "Period    3 days 00:00:00\n",
      "Count                2.25\n",
      "Mean            11.777778\n",
      "Std              0.859117\n",
      "Min                  11.0\n",
      "Median          11.666667\n",
      "Max             12.666667\n",
      "Name: agg_func_mean, dtype: object\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:7: UserWarning: Metric 'idx_min' returned multiple values despite having no aggregation function\n",
      "  import sys\n",
      "/Users/olegpolakow/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:7: UserWarning: Metric 'idx_max' returned multiple values despite having no aggregation function\n",
      "  import sys\n",
      "/Users/olegpolakow/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:7: UserWarning: Object has multiple columns. Aggregating using <function mean at 0x7feb1013b598>. Pass column to select a single column/group.\n",
      "  import sys\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "44.3 ms ± 343 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "Start                               x\n",
      "End                                 z\n",
      "Period                3 days 00:00:00\n",
      "Count                            2.25\n",
      "Value Counts: 10.0                0.5\n",
      "Value Counts: 11.0                0.5\n",
      "Value Counts: 12.0                0.5\n",
      "Value Counts: 13.0                0.5\n",
      "Value Counts: 14.0               0.25\n",
      "Name: agg_func_mean, dtype: object\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:10: UserWarning: Object has multiple columns. Aggregating using <function mean at 0x7feb1013b598>. Pass column to select a single column/group.\n",
      "  # Remove the CWD from sys.path while we load stuff.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "23.1 ms ± 475 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(mapped_array[(0, 'a')].stats())\n",
    "%timeit big_mapped_array[0].stats(silence_warnings=True)\n",
    "\n",
    "print(mapped_array.stats(column=(0, 'a')))\n",
    "%timeit big_mapped_array.stats(column=0, silence_warnings=True)\n",
    "\n",
    "print(mapped_array.stats())\n",
    "%timeit big_mapped_array.stats(silence_warnings=True)\n",
    "\n",
    "print(mapped_array.copy(mapping=mapping).stats())\n",
    "%timeit big_mapped_array.copy(mapping=big_mapping).stats(silence_warnings=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-c70295\"><g class=\"clips\"><clipPath id=\"clipc70295xyplot\" class=\"plotclip\"><rect width=\"637\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clipc70295x\"><rect x=\"33\" y=\"0\" width=\"637\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clipc70295y\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clipc70295xy\"><rect x=\"33\" y=\"46\" width=\"637\" height=\"274\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"33\" y=\"46\" width=\"637\" height=\"274\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"/><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,254.93)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,189.85)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,124.77)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,59.7)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"><path class=\"yzl zl crisp\" transform=\"translate(0,320)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 2px;\"/></g><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(33,46)\" clip-path=\"url(#clipc70295xyplot)\"><g class=\"barlayer mlayer\"><g class=\"trace bars\" shape-rendering=\"crispEdges\" style=\"opacity: 1;\"><g class=\"points\"><g class=\"point\"><path d=\"M0,274V13.7H318.5V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"point\"><path d=\"M318.5,274V143.85H637V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" transform=\"translate(33,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">9.5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(112.63,0)\">10</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(192.25,0)\">10.5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(271.88,0)\">11</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(351.5,0)\">11.5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(431.13,0)\">12</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(510.75,0)\">12.5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(590.38,0)\">13</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(670,0)\">13.5</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" transform=\"translate(0,320)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">0</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,254.93)\">0.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,189.85)\">1</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,124.77)\">1.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,59.7)\">2</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-c70295\"><g class=\"clips\"/><clipPath id=\"legendc70295\"><rect width=\"86\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(584,11.519999999999996)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\" width=\"86\" height=\"29\" x=\"0\" y=\"0\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legendc70295)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(0, 'a')</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendundefined\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"83.265625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\" x=\"0\" y=\"0\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-6addc6\"><g class=\"clips\"><clipPath id=\"clip6addc6xyplot\" class=\"plotclip\"><rect width=\"637\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clip6addc6x\"><rect x=\"33\" y=\"0\" width=\"637\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clip6addc6y\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clip6addc6xy\"><rect x=\"33\" y=\"46\" width=\"637\" height=\"274\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"33\" y=\"46\" width=\"637\" height=\"274\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"/><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,254.93)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,189.85)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,124.77)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,59.7)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"><path class=\"yzl zl crisp\" transform=\"translate(0,320)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 2px;\"/></g><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(33,46)\" clip-path=\"url(#clip6addc6xyplot)\"><g class=\"barlayer mlayer\"><g class=\"trace bars\" shape-rendering=\"crispEdges\" style=\"opacity: 0.75;\"><g class=\"points\"><g class=\"point\"><path d=\"M0,274V13.7H254.8V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"point\"><path d=\"M254.8,274V143.85H509.6V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><g class=\"trace bars\" shape-rendering=\"crispEdges\" style=\"opacity: 0.75;\"><g class=\"points\"><g class=\"point\"><path d=\"M382.2,274V13.7H509.6V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(255, 127, 14); fill-opacity: 1;\"/></g><g class=\"point\"><path d=\"M509.6,274V143.85H637V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(255, 127, 14); fill-opacity: 1;\"/></g></g></g><g class=\"trace bars\" shape-rendering=\"crispEdges\" style=\"opacity: 0.75;\"><g class=\"points\"><g class=\"point\"><path d=\"M0,274V13.7H254.8V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(44, 160, 44); fill-opacity: 1;\"/></g><g class=\"point\"><path d=\"M254.8,274V143.85H509.6V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(44, 160, 44); fill-opacity: 1;\"/></g></g></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" transform=\"translate(96.7,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">10</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(224.1,0)\">11</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(351.5,0)\">12</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(478.9,0)\">13</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(606.3,0)\">14</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" transform=\"translate(0,320)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">0</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,254.93)\">0.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,189.85)\">1</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,124.77)\">1.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,59.7)\">2</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-6addc6\"><g class=\"clips\"/><clipPath id=\"legend6addc6\"><rect width=\"257\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(413,11.519999999999996)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\" width=\"257\" height=\"29\" x=\"0\" y=\"0\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legend6addc6)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(0, 'a')</text><g class=\"layers\" style=\"opacity: 0.75;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendundefined\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"83.265625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(85.765625,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(1, 'b')</text><g class=\"layers\" style=\"opacity: 0.75;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendundefined\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 0px; fill: rgb(255, 127, 14); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"83.546875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(171.8125,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(1, 'c')</text><g class=\"layers\" style=\"opacity: 0.75;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendundefined\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 0px; fill: rgb(44, 160, 44); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"82.3125\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\" x=\"0\" y=\"0\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-61099c\"><g class=\"clips\"><clipPath id=\"clip61099cxyplot\" class=\"plotclip\"><rect width=\"637\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clip61099cx\"><rect x=\"33\" y=\"0\" width=\"637\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clip61099cy\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clip61099cxy\"><rect x=\"33\" y=\"46\" width=\"637\" height=\"274\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"33\" y=\"46\" width=\"637\" height=\"274\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"/><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,276.62)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,233.23)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,189.85)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,146.47)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,103.08)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,59.7)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"><path class=\"yzl zl crisp\" transform=\"translate(0,320)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 2px;\"/></g><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(33,46)\" clip-path=\"url(#clip61099cxyplot)\"><g class=\"barlayer mlayer\"><g class=\"trace bars\" shape-rendering=\"crispEdges\" style=\"opacity: 0.75;\"><g class=\"points\"><g class=\"point\"><path d=\"M0,274V100.47H212.33V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"point\"><path d=\"M212.33,274V187.23H424.67V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><g class=\"trace bars\" shape-rendering=\"crispEdges\" style=\"opacity: 0.75;\"><g class=\"points\"><g class=\"point\"><path d=\"M0,274V100.47H212.33V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(255, 127, 14); fill-opacity: 1;\"/></g><g class=\"point\"><path d=\"M212.33,274V13.7H424.67V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(255, 127, 14); fill-opacity: 1;\"/></g><g class=\"point\"><path d=\"M424.67,274V187.23H637V274Z\" style=\"vector-effect: non-scaling-stroke; opacity: 1; stroke-width: 0px; fill: rgb(255, 127, 14); fill-opacity: 1;\"/></g></g></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" transform=\"translate(86.08,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">10</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(192.25,0)\">11</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(298.42,0)\">12</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(404.58,0)\">13</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(510.75,0)\">14</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(616.92,0)\">15</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" transform=\"translate(0,320)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">0</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,276.62)\">0.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,233.23)\">1</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,189.85)\">1.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,146.47)\">2</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,103.08)\">2.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,59.7)\">3</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-61099c\"><g class=\"clips\"/><clipPath id=\"legend61099c\"><rect width=\"106\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(564,11.519999999999996)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\" width=\"106\" height=\"29\" x=\"0\" y=\"0\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legend61099c)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">0</text><g class=\"layers\" style=\"opacity: 0.75;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendundefined\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"50.140625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(52.640625,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">1</text><g class=\"layers\" style=\"opacity: 0.75;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendundefined\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 0px; fill: rgb(255, 127, 14); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"50.140625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\" x=\"0\" y=\"0\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mapped_array[(0, 'a')].histplot().show_svg()\n",
    "mapped_array.histplot().show_svg()\n",
    "mapped_array_grouped.histplot().show_svg()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-2d103d\"><g class=\"clips\"><clipPath id=\"clip2d103dxyplot\" class=\"plotclip\"><rect width=\"630\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clip2d103dx\"><rect x=\"40\" y=\"0\" width=\"630\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clip2d103dy\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clip2d103dxy\"><rect x=\"40\" y=\"46\" width=\"630\" height=\"274\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"40\" y=\"46\" width=\"630\" height=\"274\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"/><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,306.3)\" d=\"M40,0h630\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,244.65)\" d=\"M40,0h630\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,183)\" d=\"M40,0h630\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,121.35)\" d=\"M40,0h630\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,59.7)\" d=\"M40,0h630\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(40,46)\" clip-path=\"url(#clip2d103dxyplot)\"><g class=\"boxlayer mlayer\"><g class=\"trace boxes\" style=\"opacity: 1;\"><path class=\"box\" d=\"M160.65,137H469.35M160.65,229.47H469.35V44.52H160.65ZM315,229.47V260.3M315,44.52V13.7M237.83,260.3H392.17M237.83,13.7H392.17\" style=\"vector-effect: non-scaling-stroke; stroke-width: 2px; stroke: rgb(31, 119, 180); stroke-opacity: 1; fill: rgb(31, 119, 180); fill-opacity: 0.5;\"/><g class=\"points\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" transform=\"translate(355,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">(0, 'a')</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"39\" y=\"4.199999999999999\" transform=\"translate(0,306.3)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">10</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"39\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,244.65)\">10.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"39\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,183)\">11</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"39\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,121.35)\">11.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"39\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,59.7)\">12</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-2d103d\"><g class=\"clips\"/><clipPath id=\"legend2d103d\"><rect width=\"86\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(584,11.519999999999996)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"86\" height=\"29\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legend2d103d)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(0, 'a')</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendbox\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 2px; fill: rgb(31, 119, 180); fill-opacity: 0.5; stroke: rgb(31, 119, 180); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"83.265625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-7cd63b\"><g class=\"clips\"><clipPath id=\"clip7cd63bxyplot\" class=\"plotclip\"><rect width=\"640\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clip7cd63bx\"><rect x=\"30\" y=\"0\" width=\"640\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clip7cd63by\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clip7cd63bxy\"><rect x=\"30\" y=\"46\" width=\"640\" height=\"274\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"30\" y=\"46\" width=\"640\" height=\"274\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"/><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,306.3)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,244.65)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,183)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,121.35)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,59.7)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(30,46)\" clip-path=\"url(#clip7cd63bxyplot)\"><g class=\"boxlayer mlayer\"><g class=\"trace boxes\" style=\"opacity: 1;\"><path class=\"box\" d=\"M54.4,198.65H158.93M54.4,244.89H158.93V152.41H54.4ZM106.67,244.89V260.3M106.67,152.41V137M80.53,260.3H132.8M80.53,137H132.8\" style=\"vector-effect: non-scaling-stroke; stroke-width: 2px; stroke: rgb(31, 119, 180); stroke-opacity: 1; fill: rgb(31, 119, 180); fill-opacity: 0.5;\"/><g class=\"points\"/></g><g class=\"trace boxes\" style=\"opacity: 1;\"><path class=\"box\" d=\"M267.73,74.35H372.27M267.73,75.35H372.27V29.11H267.73ZM320,75.35V75.35M320,29.11V13.7M293.87,75.35H346.13M293.87,13.7H346.13\" style=\"vector-effect: non-scaling-stroke; stroke-width: 2px; stroke: rgb(255, 127, 14); stroke-opacity: 1; fill: rgb(255, 127, 14); fill-opacity: 0.5;\"/><g class=\"points\"/></g><g class=\"trace boxes\" style=\"opacity: 1;\"><path class=\"box\" d=\"M481.07,198.65H585.6M481.07,244.89H585.6V152.41H481.07ZM533.33,244.89V260.3M533.33,152.41V137M507.2,260.3H559.47M507.2,137H559.47\" style=\"vector-effect: non-scaling-stroke; stroke-width: 2px; stroke: rgb(44, 160, 44); stroke-opacity: 1; fill: rgb(44, 160, 44); fill-opacity: 0.5;\"/><g class=\"points\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" transform=\"translate(136.67000000000002,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">(0, 'a')</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" transform=\"translate(350,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">(1, 'b')</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" transform=\"translate(563.33,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">(1, 'c')</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" transform=\"translate(0,306.3)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">10</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,244.65)\">11</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,183)\">12</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,121.35)\">13</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,59.7)\">14</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-7cd63b\"><g class=\"clips\"/><clipPath id=\"legend7cd63b\"><rect width=\"257\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(413,11.519999999999996)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"257\" height=\"29\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legend7cd63b)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(0, 'a')</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendbox\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 2px; fill: rgb(31, 119, 180); fill-opacity: 0.5; stroke: rgb(31, 119, 180); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"83.265625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(85.765625,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(1, 'b')</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendbox\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 2px; fill: rgb(255, 127, 14); fill-opacity: 0.5; stroke: rgb(255, 127, 14); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"83.546875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(171.8125,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(1, 'c')</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendbox\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 2px; fill: rgb(44, 160, 44); fill-opacity: 0.5; stroke: rgb(44, 160, 44); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"82.3125\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-bff574\"><g class=\"clips\"><clipPath id=\"clipbff574xyplot\" class=\"plotclip\"><rect width=\"640\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clipbff574x\"><rect x=\"30\" y=\"0\" width=\"640\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clipbff574y\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"274\"/></clipPath><clipPath class=\"axesclip\" id=\"clipbff574xy\"><rect x=\"30\" y=\"46\" width=\"640\" height=\"274\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"30\" y=\"46\" width=\"640\" height=\"274\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"/><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,306.3)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,244.65)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,183)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,121.35)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,59.7)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(30,46)\" clip-path=\"url(#clipbff574xyplot)\"><g class=\"boxlayer mlayer\"><g class=\"trace boxes\" style=\"opacity: 1;\"><path class=\"box\" d=\"M81.6,198.65H238.4M81.6,244.89H238.4V152.41H81.6ZM160,244.89V260.3M160,152.41V137M120.8,260.3H199.2M120.8,137H199.2\" style=\"vector-effect: non-scaling-stroke; stroke-width: 2px; stroke: rgb(31, 119, 180); stroke-opacity: 1; fill: rgb(31, 119, 180); fill-opacity: 0.5;\"/><g class=\"points\"/></g><g class=\"trace boxes\" style=\"opacity: 1;\"><path class=\"box\" d=\"M401.6,106.17H558.4M401.6,198.65H558.4V75.35H401.6ZM480,198.65V260.3M480,75.35V13.7M440.8,260.3H519.2M440.8,13.7H519.2\" style=\"vector-effect: non-scaling-stroke; stroke-width: 2px; stroke: rgb(255, 127, 14); stroke-opacity: 1; fill: rgb(255, 127, 14); fill-opacity: 0.5;\"/><g class=\"points\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" transform=\"translate(190,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">0</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"333\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(510,0)\">1</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" transform=\"translate(0,306.3)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">10</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,244.65)\">11</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,183)\">12</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,121.35)\">13</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,59.7)\">14</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-bff574\"><g class=\"clips\"/><clipPath id=\"legendbff574\"><rect width=\"106\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(564,11.519999999999996)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"106\" height=\"29\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legendbff574)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">0</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendbox\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 2px; fill: rgb(31, 119, 180); fill-opacity: 0.5; stroke: rgb(31, 119, 180); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"50.140625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(52.640625,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">1</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"legendbox\" d=\"M6,6H-6V-6H6Z\" transform=\"translate(20,0)\" style=\"stroke-width: 2px; fill: rgb(255, 127, 14); fill-opacity: 0.5; stroke: rgb(255, 127, 14); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"50.140625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mapped_array[(0, 'a')].boxplot().show_svg()\n",
    "mapped_array.boxplot().show_svg()\n",
    "mapped_array_grouped.boxplot().show_svg()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"750\" height=\"380\" style=\"\" viewBox=\"0 0 750 380\"><rect x=\"0\" y=\"0\" width=\"750\" height=\"380\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-f7d873\"><g class=\"clips\"><clipPath id=\"clipf7d873xyplot\" class=\"plotclip\"><rect width=\"680\" height=\"260\"/></clipPath><clipPath class=\"axesclip\" id=\"clipf7d873x\"><rect x=\"40\" y=\"0\" width=\"680\" height=\"380\"/></clipPath><clipPath class=\"axesclip\" id=\"clipf7d873y\"><rect x=\"0\" y=\"68\" width=\"750\" height=\"260\"/></clipPath><clipPath class=\"axesclip\" id=\"clipf7d873xy\"><rect x=\"40\" y=\"68\" width=\"680\" height=\"260\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"40\" y=\"68\" width=\"680\" height=\"260\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"><path class=\"xgrid crisp\" transform=\"translate(77.75,0)\" d=\"M0,68v260\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(380,0)\" d=\"M0,68v260\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(682.25,0)\" d=\"M0,68v260\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,311.25)\" d=\"M40,0h680\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,254.63)\" d=\"M40,0h680\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,198)\" d=\"M40,0h680\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,141.38)\" d=\"M40,0h680\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,84.75)\" d=\"M40,0h680\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(40,68)\" clip-path=\"url(#clipf7d873xyplot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter tracefdacad43-8d85-4678-b212-b17c94fa4875\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M37.75,243.25L642.25,16.75\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(37.75,243.25)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(340,130)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(642.25,16.75)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"341\" transform=\"translate(77.75,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">x</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"341\" transform=\"translate(380,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">y</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"341\" transform=\"translate(682.25,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">z</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"39\" y=\"4.199999999999999\" transform=\"translate(0,311.25)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">10</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"39\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,254.63)\">10.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"39\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,198)\">11</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"39\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,141.38)\">11.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"39\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,84.75)\">12</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-f7d873\"><g class=\"clips\"/><clipPath id=\"legendf7d873\"><rect width=\"86\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(634,11.631578947368453)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"86\" height=\"29\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legendf7d873)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(0, 'a')</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"83.265625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"><text class=\"xtitle\" x=\"380\" y=\"368.3\" text-anchor=\"middle\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 14px; fill: rgb(42, 63, 95); opacity: 1; font-weight: normal; white-space: pre;\">Index</text></g><g class=\"g-ytitle\"/><g class=\"annotation\" data-index=\"0\" style=\"opacity: 1;\"><g class=\"annotation-text-g\" transform=\"rotate(0,380,56)\"><g class=\"cursor-pointer\" transform=\"translate(335,44)\"><rect class=\"bg\" x=\"0.5\" y=\"0.5\" width=\"90\" height=\"23\" style=\"stroke-width: 1px; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 0, 0); fill-opacity: 0;\"/><text class=\"annotation-text\" text-anchor=\"middle\" x=\"45.34375\" y=\"18\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 16px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">to_pd_plot</text></g></g></g></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"750\" height=\"380\" style=\"\" viewBox=\"0 0 750 380\"><rect x=\"0\" y=\"0\" width=\"750\" height=\"380\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-a82e1d\"><g class=\"clips\"><clipPath id=\"clipa82e1dxyplot\" class=\"plotclip\"><rect width=\"690\" height=\"260\"/></clipPath><clipPath class=\"axesclip\" id=\"clipa82e1dx\"><rect x=\"30\" y=\"0\" width=\"690\" height=\"380\"/></clipPath><clipPath class=\"axesclip\" id=\"clipa82e1dy\"><rect x=\"0\" y=\"68\" width=\"750\" height=\"260\"/></clipPath><clipPath class=\"axesclip\" id=\"clipa82e1dxy\"><rect x=\"30\" y=\"68\" width=\"690\" height=\"260\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"30\" y=\"68\" width=\"690\" height=\"260\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"><path class=\"xgrid crisp\" transform=\"translate(68.25,0)\" d=\"M0,68v260\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(375,0)\" d=\"M0,68v260\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(681.75,0)\" d=\"M0,68v260\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,311.25)\" d=\"M30,0h690\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,254.63)\" d=\"M30,0h690\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,198)\" d=\"M30,0h690\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,141.37)\" d=\"M30,0h690\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,84.75)\" d=\"M30,0h690\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(30,68)\" clip-path=\"url(#clipa82e1dxyplot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter traceb037390a-7b3e-4e76-8666-79cdfea531ae\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M38.25,243.25L651.75,130\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(38.25,243.25)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(345,186.63)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(651.75,130)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace0131fe6f-7c6c-4715-b573-e77b83a0326c\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M38.25,73.37L345,16.75L651.75,73.37\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(255, 127, 14); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(38.25,73.37)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(255, 127, 14); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(345,16.75)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(255, 127, 14); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(651.75,73.37)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(255, 127, 14); fill-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace768cd6e7-0514-44e9-980f-96d46aed9ba2\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M38.25,130L651.75,243.25\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(44, 160, 44); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(38.25,130)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(44, 160, 44); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(345,186.63)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(44, 160, 44); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(651.75,243.25)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(44, 160, 44); fill-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace5861e3bb-b876-4d6c-8746-26107a353931\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"/><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"341\" transform=\"translate(68.25,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">x</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"341\" transform=\"translate(375,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">y</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"341\" transform=\"translate(681.75,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">z</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" transform=\"translate(0,311.25)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">10</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,254.63)\">11</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,198)\">12</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,141.37)\">13</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,84.75)\">14</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-a82e1d\"><g class=\"clips\"/><clipPath id=\"legenda82e1d\"><rect width=\"343\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(377,11.631578947368453)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"343\" height=\"29\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legenda82e1d)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(0, 'a')</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"83.265625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(85.765625,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(1, 'b')</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(255, 127, 14); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(255, 127, 14); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"83.546875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(171.8125,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(1, 'c')</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(44, 160, 44); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(44, 160, 44); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"82.3125\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(256.625,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">(1, 'd')</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(220, 57, 18); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(220, 57, 18); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"83.546875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"><text class=\"xtitle\" x=\"375\" y=\"368.3\" text-anchor=\"middle\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 14px; fill: rgb(42, 63, 95); opacity: 1; font-weight: normal; white-space: pre;\">Index</text></g><g class=\"g-ytitle\"/><g class=\"annotation\" data-index=\"0\" style=\"opacity: 1;\"><g class=\"annotation-text-g\" transform=\"rotate(0,375,56)\"><g class=\"cursor-pointer\" transform=\"translate(330,44)\"><rect class=\"bg\" x=\"0.5\" y=\"0.5\" width=\"90\" height=\"23\" style=\"stroke-width: 1px; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 0, 0); fill-opacity: 0;\"/><text class=\"annotation-text\" text-anchor=\"middle\" x=\"45.34375\" y=\"18\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 16px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">to_pd_plot</text></g></g></g></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "mapped_array[(0, 'a')].plots().show_svg()\n",
    "mapped_array.plots().show_svg()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Records"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(0, 0, 0, 10., 21.) (1, 1, 0, 11., 20.) (2, 2, 0, 12., 19.)]\n",
      "MultiIndex([(0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[(3, 0, 0, 13., 18.) (4, 1, 0, 14., 17.) (5, 2, 0, 13., 18.)]\n",
      "MultiIndex([(1, 'b')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[(0, 0, 0, 10., 21.) (1, 1, 0, 11., 20.) (2, 2, 0, 12., 19.)\n",
      " (0, 0, 1, 10., 21.) (1, 1, 1, 11., 20.) (2, 2, 1, 12., 19.)]\n",
      "MultiIndex([(0, 'a'),\n",
      "            (0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[(0, 0, 0, 10., 21.) (1, 1, 0, 11., 20.) (2, 2, 0, 12., 19.)\n",
      " (3, 0, 1, 13., 18.) (4, 1, 1, 14., 17.) (5, 2, 1, 13., 18.)]\n",
      "MultiIndex([(0, 'a'),\n",
      "            (1, 'b')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "810 µs ± 9.11 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "13.7 ms ± 259 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records[(0, 'a')].values)\n",
    "print(records[(0, 'a')].wrapper.columns)\n",
    "\n",
    "print(records[(1, 'b')].values)\n",
    "print(records[(1, 'b')].wrapper.columns)\n",
    "\n",
    "print(records[[(0, 'a'), (0, 'a')]].values)\n",
    "print(records[[(0, 'a'), (0, 'a')]].wrapper.columns)\n",
    "\n",
    "print(records[[(0, 'a'), (1, 'b')]].values)\n",
    "print(records[[(0, 'a'), (1, 'b')]].wrapper.columns)\n",
    "\n",
    "%timeit big_records.iloc[0]\n",
    "%timeit big_records.iloc[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(2, 2, 0, 12., 19.) (1, 1, 0, 11., 20.) (0, 0, 0, 10., 21.)]\n",
      "MultiIndex([(0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[(5, 2, 0, 13., 18.) (4, 1, 0, 14., 17.) (3, 0, 0, 13., 18.)]\n",
      "MultiIndex([(1, 'b')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[(2, 2, 0, 12., 19.) (1, 1, 0, 11., 20.) (0, 0, 0, 10., 21.)\n",
      " (2, 2, 1, 12., 19.) (1, 1, 1, 11., 20.) (0, 0, 1, 10., 21.)]\n",
      "MultiIndex([(0, 'a'),\n",
      "            (0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "[(2, 2, 0, 12., 19.) (1, 1, 0, 11., 20.) (0, 0, 0, 10., 21.)\n",
      " (5, 2, 1, 13., 18.) (4, 1, 1, 14., 17.) (3, 0, 1, 13., 18.)]\n",
      "MultiIndex([(0, 'a'),\n",
      "            (1, 'b')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "842 µs ± 5.42 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "15.9 ms ± 678 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records_nosort[(0, 'a')].values)\n",
    "print(records_nosort[(0, 'a')].wrapper.columns)\n",
    "\n",
    "print(records_nosort[(1, 'b')].values)\n",
    "print(records_nosort[(1, 'b')].wrapper.columns)\n",
    "\n",
    "print(records_nosort[[(0, 'a'), (0, 'a')]].values)\n",
    "print(records_nosort[[(0, 'a'), (0, 'a')]].wrapper.columns)\n",
    "\n",
    "print(records_nosort[[(0, 'a'), (1, 'b')]].values)\n",
    "print(records_nosort[[(0, 'a'), (1, 'b')]].wrapper.columns)\n",
    "\n",
    "%timeit big_records_nosort.iloc[0]\n",
    "%timeit big_records_nosort.iloc[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MultiIndex([(0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "1\n",
      "1\n",
      "Index([0], dtype='int64', name='lvl1')\n",
      "MultiIndex([(1, 'b'),\n",
      "            (1, 'c'),\n",
      "            (1, 'd')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "2\n",
      "1\n",
      "Index([1, 1, 1], dtype='int64', name='lvl1')\n",
      "MultiIndex([(0, 'a')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "2\n",
      "2\n",
      "Index([0], dtype='int64', name='lvl1')\n",
      "MultiIndex([(0, 'a'),\n",
      "            (1, 'b'),\n",
      "            (1, 'c'),\n",
      "            (1, 'd')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "2\n",
      "2\n",
      "Index([0, 1, 1, 1], dtype='int64', name='lvl1')\n",
      "6.25 ms ± 70.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "13.9 ms ± 264 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records_grouped[0].wrapper.columns)  # indexing on groups, not columns!\n",
    "print(records_grouped[0].wrapper.ndim)\n",
    "print(records_grouped[0].wrapper.grouped_ndim)\n",
    "print(records_grouped[0].wrapper.grouper.group_by)\n",
    "\n",
    "print(records_grouped[1].wrapper.columns)\n",
    "print(records_grouped[1].wrapper.ndim)\n",
    "print(records_grouped[1].wrapper.grouped_ndim)\n",
    "print(records_grouped[1].wrapper.grouper.group_by)\n",
    "\n",
    "print(records_grouped[[0]].wrapper.columns)\n",
    "print(records_grouped[[0]].wrapper.ndim)\n",
    "print(records_grouped[[0]].wrapper.grouped_ndim)\n",
    "print(records_grouped[[0]].wrapper.grouper.group_by)\n",
    "\n",
    "print(records_grouped[[0, 1]].wrapper.columns)\n",
    "print(records_grouped[[0, 1]].wrapper.ndim)\n",
    "print(records_grouped[[0, 1]].wrapper.grouped_ndim)\n",
    "print(records_grouped[[0, 1]].wrapper.grouper.group_by)\n",
    "\n",
    "%timeit big_records_grouped.iloc[0]\n",
    "%timeit big_records_grouped.iloc[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['x', 'y', 'z'], dtype='object')\n",
      "MultiIndex([(0, 'a'),\n",
      "            (1, 'b'),\n",
      "            (1, 'c'),\n",
      "            (1, 'd')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "2\n",
      "None\n",
      "Index(['x', 'y', 'z'], dtype='object')\n",
      "MultiIndex([(0, 'a'),\n",
      "            (1, 'b'),\n",
      "            (1, 'c'),\n",
      "            (1, 'd')],\n",
      "           names=['lvl1', 'lvl2'])\n",
      "2\n",
      "Index([0, 1, 1, 1], dtype='int64', name='lvl1')\n"
     ]
    }
   ],
   "source": [
    "print(records.wrapper.index)\n",
    "print(records.wrapper.columns)\n",
    "print(records.wrapper.ndim)\n",
    "print(records.wrapper.grouper.group_by)\n",
    "\n",
    "print(records_grouped.wrapper.index)\n",
    "print(records_grouped.wrapper.columns)\n",
    "print(records_grouped.wrapper.ndim)\n",
    "print(records_grouped.wrapper.grouper.group_by)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(0, 0, 0, 10., 21.) (1, 1, 0, 11., 20.) (2, 2, 0, 12., 19.)\n",
      " (3, 0, 1, 13., 18.) (4, 1, 1, 14., 17.) (5, 2, 1, 13., 18.)\n",
      " (6, 0, 2, 12., 19.) (7, 1, 2, 11., 20.) (8, 2, 2, 10., 21.)]\n",
      "[(0, 0, 0, 10., 21.) (1, 1, 0, 11., 20.) (2, 2, 0, 12., 19.)\n",
      " (3, 0, 1, 13., 18.) (4, 1, 1, 14., 17.) (5, 2, 1, 13., 18.)\n",
      " (6, 0, 2, 12., 19.) (7, 1, 2, 11., 20.) (8, 2, 2, 10., 21.)]\n",
      "3.54 µs ± 13.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.values)\n",
    "\n",
    "print(records.recarray)\n",
    "%timeit big_records.recarray"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   id  idx  col  some_field1  some_field2\n",
      "0   0    0    0         10.0         21.0\n",
      "1   1    1    0         11.0         20.0\n",
      "2   2    2    0         12.0         19.0\n",
      "3   3    0    1         13.0         18.0\n",
      "4   4    1    1         14.0         17.0\n",
      "5   5    2    1         13.0         18.0\n",
      "6   6    0    2         12.0         19.0\n",
      "7   7    1    2         11.0         20.0\n",
      "8   8    2    2         10.0         21.0\n"
     ]
    }
   ],
   "source": [
    "print(records.records)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "1.06 ms ± 1.99 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "False\n",
      "8.89 µs ± 232 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n",
      "True\n",
      "1.56 ms ± 1.74 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "False\n",
      "8.41 µs ± 37.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.is_sorted())\n",
    "%timeit big_records.is_sorted()\n",
    "\n",
    "print(records_nosort.is_sorted())\n",
    "%timeit big_records_nosort.is_sorted()\n",
    "\n",
    "print(records.is_sorted(incl_id=True))\n",
    "%timeit big_records.is_sorted(incl_id=True)\n",
    "\n",
    "print(records_nosort.is_sorted(incl_id=True))\n",
    "%timeit big_records_nosort.is_sorted(incl_id=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(0, 0, 0, 10., 21.) (1, 1, 0, 11., 20.) (2, 2, 0, 12., 19.)\n",
      " (3, 0, 1, 13., 18.) (4, 1, 1, 14., 17.) (5, 2, 1, 13., 18.)\n",
      " (6, 0, 2, 12., 19.) (7, 1, 2, 11., 20.) (8, 2, 2, 10., 21.)]\n",
      "1.3 ms ± 771 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "[(2, 2, 0, 12., 19.) (1, 1, 0, 11., 20.) (0, 0, 0, 10., 21.)\n",
      " (5, 2, 1, 13., 18.) (4, 1, 1, 14., 17.) (3, 0, 1, 13., 18.)\n",
      " (8, 2, 2, 10., 21.) (7, 1, 2, 11., 20.) (6, 0, 2, 12., 19.)]\n",
      "70.6 ms ± 1.59 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "[(0, 0, 0, 10., 21.) (1, 1, 0, 11., 20.) (2, 2, 0, 12., 19.)\n",
      " (3, 0, 1, 13., 18.) (4, 1, 1, 14., 17.) (5, 2, 1, 13., 18.)\n",
      " (6, 0, 2, 12., 19.) (7, 1, 2, 11., 20.) (8, 2, 2, 10., 21.)]\n",
      "1.83 ms ± 12.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "[(0, 0, 0, 10., 21.) (1, 1, 0, 11., 20.) (2, 2, 0, 12., 19.)\n",
      " (3, 0, 1, 13., 18.) (4, 1, 1, 14., 17.) (5, 2, 1, 13., 18.)\n",
      " (6, 0, 2, 12., 19.) (7, 1, 2, 11., 20.) (8, 2, 2, 10., 21.)]\n",
      "66 ms ± 1.53 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.sort().records_arr)\n",
    "%timeit big_records.sort()\n",
    "\n",
    "print(records_nosort.sort().records_arr)\n",
    "%timeit big_records_nosort.sort()\n",
    "\n",
    "print(records.sort(incl_id=True).records_arr)\n",
    "%timeit big_records.sort(incl_id=True)\n",
    "\n",
    "print(records_nosort.sort(incl_id=True).records_arr)\n",
    "%timeit big_records_nosort.sort(incl_id=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(2, 2, 0, 12., 19.) (3, 0, 1, 13., 18.) (4, 1, 1, 14., 17.)\n",
      " (5, 2, 1, 13., 18.) (6, 0, 2, 12., 19.)]\n",
      "10.4 ms ± 232 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "mask = records.values['some_field1'] >= records.values['some_field1'].mean()\n",
    "print(records.apply_mask(mask).values)\n",
    "\n",
    "big_mask = big_records.values['some_field1'] >= big_records.values['some_field1'].mean()\n",
    "%timeit big_records.apply_mask(big_mask)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a       153.0\n",
      "1     b       146.0\n",
      "      c       153.0\n",
      "      d         0.0\n",
      "Name: sum, dtype: float64\n",
      "lvl1\n",
      "0    153.0\n",
      "1    299.0\n",
      "Name: sum, dtype: float64\n",
      "lvl1  lvl2\n",
      "0     a       153.0\n",
      "1     b       146.0\n",
      "      c       153.0\n",
      "      d         0.0\n",
      "Name: sum, dtype: float64\n",
      "3.25 ms ± 735 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "4.53 ms ± 278 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "@njit\n",
    "def map_nb(record):\n",
    "    return record.some_field1 + record.some_field2 * 2\n",
    "\n",
    "print(records.map(map_nb).sum())\n",
    "print(records_grouped.map(map_nb).sum())\n",
    "print(records_grouped.map(map_nb, group_by=False).sum())\n",
    "\n",
    "%timeit vbt.records.MappedArray(\\\n",
    "    big_wrapper,\\\n",
    "    big_records_arr['some_field1'] + big_records_arr['some_field2'] * 2,\\\n",
    "    big_records_arr['col'],\\\n",
    ")\n",
    "%timeit big_records.map(map_nb)  # faster"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 0 0 1 1 1 2 2 2]\n",
      "[0 1 2 0 1 2 0 1 2]\n",
      "[10. 11. 12. 13. 14. 13. 12. 11. 10.]\n",
      "[21. 20. 19. 18. 17. 18. 19. 20. 21.]\n",
      "lvl1  lvl2\n",
      "0     a       33.0\n",
      "1     b       40.0\n",
      "      c       33.0\n",
      "      d        0.0\n",
      "Name: sum, dtype: float64\n",
      "lvl1\n",
      "0    33.0\n",
      "1    73.0\n",
      "Name: sum, dtype: float64\n",
      "lvl1  lvl2\n",
      "0     a       33.0\n",
      "1     b       40.0\n",
      "      c       33.0\n",
      "      d        0.0\n",
      "Name: sum, dtype: float64\n",
      "293 µs ± 4.43 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.map_field('col').values)\n",
    "print(records.map_field('idx').values)\n",
    "print(records.map_field('some_field1').values)\n",
    "print(records.map_field('some_field2').values)\n",
    "\n",
    "print(records.map_field('some_field1').sum())\n",
    "print(records_grouped.map_field('some_field1').sum())\n",
    "print(records_grouped.map_field('some_field1', group_by=False).sum())\n",
    "\n",
    "%timeit big_records.map_field('some_field1')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[52. 51. 50. 49. 48. 49. 50. 51. 52.]\n",
      "lvl1\n",
      "0    153.0\n",
      "1    299.0\n",
      "Name: sum, dtype: float64\n",
      "lvl1  lvl2\n",
      "0     a       153.0\n",
      "1     b       146.0\n",
      "      c       153.0\n",
      "      d         0.0\n",
      "Name: sum, dtype: float64\n",
      "2.55 ms ± 544 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.map_array(records_arr['some_field1'] + records_arr['some_field2'] * 2).values)\n",
    "print(records_grouped.map_array(records_arr['some_field1'] + records_arr['some_field2'] * 2).sum())\n",
    "print(records_grouped.map_array(records_arr['some_field1'] + records_arr['some_field2'] * 2, group_by=False).sum())\n",
    "\n",
    "%timeit big_records.map_array(big_records_arr['some_field1'] + big_records_arr['some_field2'] * 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a       3\n",
      "1     b       3\n",
      "      c       3\n",
      "      d       0\n",
      "Name: count, dtype: int64\n",
      "lvl1\n",
      "0    3\n",
      "1    6\n",
      "Name: count, dtype: int64\n",
      "lvl1  lvl2\n",
      "0     a       3\n",
      "1     b       3\n",
      "      c       3\n",
      "      d       0\n",
      "Name: count, dtype: int64\n",
      "49.5 µs ± 133 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n",
      "48.5 µs ± 595 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(records.count())\n",
    "print(records_grouped.count())\n",
    "print(records_grouped.count(group_by=False))\n",
    "\n",
    "%timeit big_records.count()\n",
    "%timeit big_records_grouped.count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lvl1  lvl2\n",
      "0     a       1\n",
      "1     b       0\n",
      "      c       1\n",
      "      d       0\n",
      "Name: count, dtype: int64\n",
      "lvl1\n",
      "0    1\n",
      "1    1\n",
      "Name: count, dtype: int64\n",
      "lvl1  lvl2\n",
      "0     a       1\n",
      "1     b       0\n",
      "      c       1\n",
      "      d       0\n",
      "Name: count, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "filter_mask = np.array([True, False, False, False, False, False, False, False, True])\n",
    "\n",
    "print(records.apply_mask(filter_mask).count())\n",
    "print(records_grouped.apply_mask(filter_mask).count())\n",
    "print(records_grouped.apply_mask(filter_mask, group_by=False).count())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   id  idx  col  some_field1  some_field2\n",
      "0   0    0    0         10.0         21.0\n",
      "1   8    2    2         10.0         21.0\n"
     ]
    }
   ],
   "source": [
    "filtered_records = records.apply_mask(filter_mask)\n",
    "print(filtered_records.records)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   id  idx  col  some_field1  some_field2\n",
      "0   0    0    0         10.0         21.0\n",
      "[10.]\n",
      "10.0\n",
      "1\n"
     ]
    }
   ],
   "source": [
    "print(filtered_records[(0, 'a')].records)\n",
    "print(filtered_records[(0, 'a')].map_field('some_field1').values)\n",
    "print(filtered_records[(0, 'a')].map_field('some_field1').min())\n",
    "print(filtered_records[(0, 'a')].count())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Empty DataFrame\n",
      "Columns: [id, idx, col, some_field1, some_field2]\n",
      "Index: []\n",
      "[]\n",
      "nan\n",
      "0\n"
     ]
    }
   ],
   "source": [
    "print(filtered_records[(1, 'b')].records)\n",
    "print(filtered_records[(1, 'b')].map_field('some_field1').values)\n",
    "print(filtered_records[(1, 'b')].map_field('some_field1').min())\n",
    "print(filtered_records[(1, 'b')].count())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   id  idx  col  some_field1  some_field2\n",
      "0   8    2    0         10.0         21.0\n",
      "[10.]\n",
      "10.0\n",
      "1\n"
     ]
    }
   ],
   "source": [
    "print(filtered_records[(1, 'c')].records)\n",
    "print(filtered_records[(1, 'c')].map_field('some_field1').values)\n",
    "print(filtered_records[(1, 'c')].map_field('some_field1').min())\n",
    "print(filtered_records[(1, 'c')].count())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Empty DataFrame\n",
      "Columns: [id, idx, col, some_field1, some_field2]\n",
      "Index: []\n",
      "[]\n",
      "nan\n",
      "0\n"
     ]
    }
   ],
   "source": [
    "print(filtered_records[(1, 'd')].records)\n",
    "print(filtered_records[(1, 'd')].map_field('some_field1').values)\n",
    "print(filtered_records[(1, 'd')].map_field('some_field1').min())\n",
    "print(filtered_records[(1, 'd')].count())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Start                   x\n",
      "End                     z\n",
      "Period    3 days 00:00:00\n",
      "Count                   3\n",
      "Name: (0, a), dtype: object\n",
      "12.7 ms ± 680 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "Start                   x\n",
      "End                     z\n",
      "Period    3 days 00:00:00\n",
      "Count                   3\n",
      "Name: (0, a), dtype: object\n",
      "2.18 ms ± 42.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "Start                   x\n",
      "End                     z\n",
      "Period    3 days 00:00:00\n",
      "Count                2.25\n",
      "Name: agg_func_mean, dtype: object\n",
      "2.1 ms ± 1.67 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:7: UserWarning:\n",
      "\n",
      "Object has multiple columns. Aggregating using <function mean at 0x7fbd30c34598>. Pass column to select a single column/group.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(records[(0, 'a')].stats())\n",
    "%timeit big_records[0].stats(silence_warnings=True)\n",
    "\n",
    "print(records.stats(column=(0, 'a')))\n",
    "%timeit big_records.stats(column=0, silence_warnings=True)\n",
    "\n",
    "print(records.stats())\n",
    "%timeit big_records.stats(silence_warnings=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:1: UserWarning:\n",
      "\n",
      "No subplots to plot\n",
      "\n"
     ]
    }
   ],
   "source": [
    "records[(0, 'a')].plots()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Drawdowns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "ts = pd.DataFrame({\n",
    "    'a': [2, 1, 3, 1, 4, 1], \n",
    "    'b': [1, 2, 1, 3, 1, 4],\n",
    "    'c': [1, 2, 3, 2, 1, 2],\n",
    "    'd': [1, 2, 3, 4, 5, 6]\n",
    "}, index=[\n",
    "    datetime(2020, 1, 1),\n",
    "    datetime(2020, 1, 2),\n",
    "    datetime(2020, 1, 3),\n",
    "    datetime(2020, 1, 4),\n",
    "    datetime(2020, 1, 5),\n",
    "    datetime(2020, 1, 6)\n",
    "])\n",
    "\n",
    "np.random.seed(42)\n",
    "big_ts = pd.DataFrame(np.random.randint(1, 10, size=(1000, 1000)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(6,)\n"
     ]
    }
   ],
   "source": [
    "drawdowns = vbt.Drawdowns.from_ts(ts, freq='1 days')\n",
    "print(drawdowns.values.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(99845,)\n"
     ]
    }
   ],
   "source": [
    "big_drawdowns = vbt.Drawdowns.from_ts(big_ts, freq='1 days')\n",
    "print(big_drawdowns.values.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5.37 ms ± 57.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit vbt.Drawdowns.from_ts(big_ts, freq='1 days')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   id  col  peak_idx  start_idx  valley_idx  end_idx  peak_val  valley_val  \\\n",
      "0   0    0         0          1           1        2       2.0         1.0   \n",
      "1   1    0         2          3           3        4       3.0         1.0   \n",
      "2   2    0         4          5           5        5       4.0         1.0   \n",
      "3   3    1         1          2           2        3       2.0         1.0   \n",
      "4   4    1         3          4           4        5       3.0         1.0   \n",
      "5   5    2         2          3           4        5       3.0         1.0   \n",
      "\n",
      "   end_val  status  \n",
      "0      2.0       1  \n",
      "1      3.0       1  \n",
      "2      1.0       0  \n",
      "3      2.0       1  \n",
      "4      3.0       1  \n",
      "5      2.0       0  \n",
      "            a  b  c  d\n",
      "2020-01-01  2  1  1  1\n",
      "2020-01-02  1  2  2  2\n",
      "2020-01-03  3  1  3  3\n",
      "2020-01-04  1  3  2  4\n",
      "2020-01-05  4  1  1  5\n",
      "2020-01-06  1  4  2  6\n",
      "   id  col  peak_idx  start_idx  valley_idx  end_idx  peak_val  valley_val  \\\n",
      "0   0    0         0          1           1        2       2.0         1.0   \n",
      "1   1    0         2          3           3        4       3.0         1.0   \n",
      "2   2    0         4          5           5        5       4.0         1.0   \n",
      "\n",
      "   end_val  status  \n",
      "0      2.0       1  \n",
      "1      3.0       1  \n",
      "2      1.0       0  \n",
      "2020-01-01    2\n",
      "2020-01-02    1\n",
      "2020-01-03    3\n",
      "2020-01-04    1\n",
      "2020-01-05    4\n",
      "2020-01-06    1\n",
      "Name: a, dtype: int64\n",
      "1.21 ms ± 12.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "3.81 ms ± 418 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns.records)\n",
    "print(drawdowns.ts)\n",
    "\n",
    "print(drawdowns['a'].records)\n",
    "print(drawdowns['a'].ts)\n",
    "\n",
    "%timeit big_drawdowns.iloc[0]\n",
    "%timeit big_drawdowns.iloc[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   Drawdown Id Column Peak Timestamp Start Timestamp Valley Timestamp  \\\n",
      "0            0      a     2020-01-01      2020-01-02       2020-01-02   \n",
      "1            1      a     2020-01-03      2020-01-04       2020-01-04   \n",
      "2            2      a     2020-01-05      2020-01-06       2020-01-06   \n",
      "3            3      b     2020-01-02      2020-01-03       2020-01-03   \n",
      "4            4      b     2020-01-04      2020-01-05       2020-01-05   \n",
      "5            5      c     2020-01-03      2020-01-04       2020-01-05   \n",
      "\n",
      "  End Timestamp  Peak Value  Valley Value  End Value     Status  \n",
      "0    2020-01-03         2.0           1.0        2.0  Recovered  \n",
      "1    2020-01-05         3.0           1.0        3.0  Recovered  \n",
      "2    2020-01-06         4.0           1.0        1.0     Active  \n",
      "3    2020-01-04         2.0           1.0        2.0  Recovered  \n",
      "4    2020-01-06         3.0           1.0        3.0  Recovered  \n",
      "5    2020-01-06         3.0           1.0        2.0     Active  \n"
     ]
    }
   ],
   "source": [
    "print(drawdowns.records_readable)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n",
      "a    3\n",
      "b    2\n",
      "c    1\n",
      "d    0\n",
      "Name: count, dtype: int64\n",
      "group\n",
      "first     5\n",
      "second    1\n",
      "Name: count, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].count())\n",
    "\n",
    "print(drawdowns.count())\n",
    "print(drawdowns.count(group_by=group_by))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2020-01-01         NaN\n",
      "2020-01-02         NaN\n",
      "2020-01-03   -0.500000\n",
      "2020-01-04         NaN\n",
      "2020-01-05   -0.666667\n",
      "2020-01-06   -0.750000\n",
      "Name: a, dtype: float64\n",
      "                   a         b         c   d\n",
      "2020-01-01       NaN       NaN       NaN NaN\n",
      "2020-01-02       NaN       NaN       NaN NaN\n",
      "2020-01-03 -0.500000       NaN       NaN NaN\n",
      "2020-01-04       NaN -0.500000       NaN NaN\n",
      "2020-01-05 -0.666667       NaN       NaN NaN\n",
      "2020-01-06 -0.750000 -0.666667 -0.666667 NaN\n",
      "463 µs ± 21.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].drawdown.to_pd())\n",
    "print(drawdowns.drawdown.to_pd())\n",
    "\n",
    "%timeit big_drawdowns.drawdown"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-0.6388888888888888\n",
      "a   -0.638889\n",
      "b   -0.583333\n",
      "c   -0.666667\n",
      "d         NaN\n",
      "Name: avg_drawdown, dtype: float64\n",
      "1.12 ms ± 200 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "group\n",
      "first    -0.616667\n",
      "second   -0.666667\n",
      "Name: avg_drawdown, dtype: float64\n",
      "4.65 ms ± 1.91 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].avg_drawdown())\n",
    "print(drawdowns.avg_drawdown())\n",
    "%timeit big_drawdowns.avg_drawdown()\n",
    "\n",
    "print(drawdowns.avg_drawdown(group_by=group_by))\n",
    "%timeit big_drawdowns.avg_drawdown(group_by=big_group_by)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-0.75\n",
      "a   -0.750000\n",
      "b   -0.666667\n",
      "c   -0.666667\n",
      "d         NaN\n",
      "Name: max_drawdown, dtype: float64\n",
      "1.15 ms ± 214 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "group\n",
      "first    -0.750000\n",
      "second   -0.666667\n",
      "Name: max_drawdown, dtype: float64\n",
      "3.81 ms ± 652 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].max_drawdown())\n",
    "print(drawdowns.max_drawdown())\n",
    "%timeit big_drawdowns.max_drawdown()\n",
    "\n",
    "print(drawdowns.max_drawdown(group_by=group_by))\n",
    "%timeit big_drawdowns.max_drawdown(group_by=big_group_by)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2020-01-01    NaN\n",
      "2020-01-02    NaN\n",
      "2020-01-03    1.0\n",
      "2020-01-04    NaN\n",
      "2020-01-05    2.0\n",
      "2020-01-06    0.0\n",
      "Name: a, dtype: float64\n",
      "              a    b    c   d\n",
      "2020-01-01  NaN  NaN  NaN NaN\n",
      "2020-01-02  NaN  NaN  NaN NaN\n",
      "2020-01-03  1.0  NaN  NaN NaN\n",
      "2020-01-04  NaN  1.0  NaN NaN\n",
      "2020-01-05  2.0  NaN  NaN NaN\n",
      "2020-01-06  0.0  2.0  1.0 NaN\n",
      "479 µs ± 45.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].recovery_return.to_pd())\n",
    "print(drawdowns.recovery_return.to_pd())\n",
    "\n",
    "%timeit big_drawdowns.recovery_return"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0\n",
      "a    1.0\n",
      "b    1.5\n",
      "c    1.0\n",
      "d    NaN\n",
      "Name: avg_recovery_return, dtype: float64\n",
      "1.01 ms ± 8.88 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "group\n",
      "first     1.2\n",
      "second    1.0\n",
      "Name: avg_recovery_return, dtype: float64\n",
      "3.48 ms ± 80 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].avg_recovery_return())\n",
    "print(drawdowns.avg_recovery_return())\n",
    "%timeit big_drawdowns.avg_recovery_return()\n",
    "\n",
    "print(drawdowns.avg_recovery_return(group_by=group_by))\n",
    "%timeit big_drawdowns.avg_recovery_return(group_by=big_group_by)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.0\n",
      "a    2.0\n",
      "b    2.0\n",
      "c    1.0\n",
      "d    NaN\n",
      "Name: max_recovery_return, dtype: float64\n",
      "1.06 ms ± 35.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "group\n",
      "first     2.0\n",
      "second    1.0\n",
      "Name: max_recovery_return, dtype: float64\n",
      "3.72 ms ± 302 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].max_recovery_return())\n",
    "print(drawdowns.max_recovery_return())\n",
    "%timeit big_drawdowns.max_recovery_return()\n",
    "\n",
    "print(drawdowns.max_recovery_return(group_by=group_by))\n",
    "%timeit big_drawdowns.max_recovery_return(group_by=big_group_by)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2020-01-01    NaN\n",
      "2020-01-02    NaN\n",
      "2020-01-03    1.0\n",
      "2020-01-04    NaN\n",
      "2020-01-05    1.0\n",
      "2020-01-06    1.0\n",
      "Name: a, dtype: float64\n",
      "              a    b    c   d\n",
      "2020-01-01  NaN  NaN  NaN NaN\n",
      "2020-01-02  NaN  NaN  NaN NaN\n",
      "2020-01-03  1.0  NaN  NaN NaN\n",
      "2020-01-04  NaN  1.0  NaN NaN\n",
      "2020-01-05  1.0  NaN  NaN NaN\n",
      "2020-01-06  1.0  1.0  3.0 NaN\n",
      "483 µs ± 6.53 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].duration.to_pd())\n",
    "print(drawdowns.duration.to_pd())\n",
    "\n",
    "%timeit big_drawdowns.duration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 days 00:00:00\n",
      "a   1 days\n",
      "b   1 days\n",
      "c   3 days\n",
      "d      NaT\n",
      "Name: avg_duration, dtype: timedelta64[ns]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/base/array_wrapper.py:661: UserWarning:\n",
      "\n",
      "Couldn't parse the frequency of index. Pass it as `freq` or define it globally under `settings.array_wrapper`.\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "905 µs ± 3.32 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "group\n",
      "first    1 days\n",
      "second   3 days\n",
      "Name: avg_duration, dtype: timedelta64[ns]\n",
      "3.34 ms ± 35.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].avg_duration())\n",
    "print(drawdowns.avg_duration())\n",
    "%timeit big_drawdowns.avg_duration()\n",
    "\n",
    "print(drawdowns.avg_duration(group_by=group_by))\n",
    "%timeit big_drawdowns.avg_duration(group_by=big_group_by)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 days 00:00:00\n",
      "a   1 days\n",
      "b   1 days\n",
      "c   3 days\n",
      "d      NaT\n",
      "Name: max_duration, dtype: timedelta64[ns]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/base/array_wrapper.py:661: UserWarning:\n",
      "\n",
      "Couldn't parse the frequency of index. Pass it as `freq` or define it globally under `settings.array_wrapper`.\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "992 µs ± 72.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "group\n",
      "first    1 days\n",
      "second   3 days\n",
      "Name: max_duration, dtype: timedelta64[ns]\n",
      "3.35 ms ± 18.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].max_duration())\n",
    "print(drawdowns.max_duration())\n",
    "%timeit big_drawdowns.max_duration()\n",
    "\n",
    "print(drawdowns.max_duration(group_by=group_by))\n",
    "%timeit big_drawdowns.max_duration(group_by=big_group_by)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5\n",
      "a    0.500000\n",
      "b    0.333333\n",
      "c    0.500000\n",
      "d         NaN\n",
      "Name: coverage, dtype: float64\n",
      "13.8 ms ± 181 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "group\n",
      "first     0.416667\n",
      "second    0.250000\n",
      "Name: coverage, dtype: float64\n",
      "16.8 ms ± 164 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].coverage())\n",
    "print(drawdowns.coverage())\n",
    "%timeit big_drawdowns.coverage()\n",
    "\n",
    "print(drawdowns.coverage(group_by=group_by))\n",
    "%timeit big_drawdowns.coverage(group_by=big_group_by)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2020-01-01    NaN\n",
      "2020-01-02    NaN\n",
      "2020-01-03    1.0\n",
      "2020-01-04    NaN\n",
      "2020-01-05    1.0\n",
      "2020-01-06    1.0\n",
      "Name: a, dtype: float64\n",
      "              a    b    c   d\n",
      "2020-01-01  NaN  NaN  NaN NaN\n",
      "2020-01-02  NaN  NaN  NaN NaN\n",
      "2020-01-03  1.0  NaN  NaN NaN\n",
      "2020-01-04  NaN  1.0  NaN NaN\n",
      "2020-01-05  1.0  NaN  NaN NaN\n",
      "2020-01-06  1.0  1.0  2.0 NaN\n",
      "518 µs ± 30.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].decline_duration.to_pd())\n",
    "print(drawdowns.decline_duration.to_pd())\n",
    "\n",
    "%timeit big_drawdowns.decline_duration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2020-01-01    NaN\n",
      "2020-01-02    NaN\n",
      "2020-01-03    1.0\n",
      "2020-01-04    NaN\n",
      "2020-01-05    1.0\n",
      "2020-01-06    0.0\n",
      "Name: a, dtype: float64\n",
      "              a    b    c   d\n",
      "2020-01-01  NaN  NaN  NaN NaN\n",
      "2020-01-02  NaN  NaN  NaN NaN\n",
      "2020-01-03  1.0  NaN  NaN NaN\n",
      "2020-01-04  NaN  1.0  NaN NaN\n",
      "2020-01-05  1.0  NaN  NaN NaN\n",
      "2020-01-06  0.0  1.0  1.0 NaN\n",
      "479 µs ± 17.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].recovery_duration.to_pd())\n",
    "print(drawdowns.recovery_duration.to_pd())\n",
    "\n",
    "%timeit big_drawdowns.recovery_duration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2020-01-01    NaN\n",
      "2020-01-02    NaN\n",
      "2020-01-03    1.0\n",
      "2020-01-04    NaN\n",
      "2020-01-05    1.0\n",
      "2020-01-06    0.0\n",
      "Name: a, dtype: float64\n",
      "              a    b    c   d\n",
      "2020-01-01  NaN  NaN  NaN NaN\n",
      "2020-01-02  NaN  NaN  NaN NaN\n",
      "2020-01-03  1.0  NaN  NaN NaN\n",
      "2020-01-04  NaN  1.0  NaN NaN\n",
      "2020-01-05  1.0  NaN  NaN NaN\n",
      "2020-01-06  0.0  1.0  0.5 NaN\n",
      "699 µs ± 43.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].recovery_duration_ratio.to_pd())\n",
    "print(drawdowns.recovery_duration_ratio.to_pd())\n",
    "\n",
    "%timeit big_drawdowns.recovery_duration_ratio"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drawdowns(**Config({\n",
      "    \"wrapper\": \"<vectorbt.base.array_wrapper.ArrayWrapper object at 0x7fa004833748> of shape (6, 4)\",\n",
      "    \"records_arr\": \"<numpy.ndarray object at 0x7fa021f50870> of shape (2,)\",\n",
      "    \"col_mapper\": null,\n",
      "    \"ts\": \"<pandas.core.frame.DataFrame object at 0x7f9ff803f898> of shape (6, 4)\",\n",
      "    \"freq\": \"1 days\"\n",
      "}))\n",
      "   id  col  peak_idx  start_idx  valley_idx  end_idx  peak_val  valley_val  \\\n",
      "0   2    0         4          5           5        5       4.0         1.0   \n",
      "\n",
      "   end_val  status  \n",
      "0      1.0       0  \n",
      "   id  col  peak_idx  start_idx  valley_idx  end_idx  peak_val  valley_val  \\\n",
      "0   2    0         4          5           5        5       4.0         1.0   \n",
      "\n",
      "   end_val  status  \n",
      "0      1.0       0  \n",
      "   id  col  peak_idx  start_idx  valley_idx  end_idx  peak_val  valley_val  \\\n",
      "0   2    0         4          5           5        5       4.0         1.0   \n",
      "1   5    2         2          3           4        5       3.0         1.0   \n",
      "\n",
      "   end_val  status  \n",
      "0      1.0       0  \n",
      "1      2.0       0  \n",
      "707 µs ± 42.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns.active)\n",
    "print(drawdowns['a'].active.records)\n",
    "print(drawdowns.active['a'].records)\n",
    "print(drawdowns.active.records)\n",
    "\n",
    "%timeit big_drawdowns.active"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drawdowns(**Config({\n",
      "    \"wrapper\": \"<vectorbt.base.array_wrapper.ArrayWrapper object at 0x7fa004833748> of shape (6, 4)\",\n",
      "    \"records_arr\": \"<numpy.ndarray object at 0x7fa021f4bad8> of shape (4,)\",\n",
      "    \"col_mapper\": null,\n",
      "    \"ts\": \"<pandas.core.frame.DataFrame object at 0x7f9ff803f898> of shape (6, 4)\",\n",
      "    \"freq\": \"1 days\"\n",
      "}))\n",
      "   id  col  peak_idx  start_idx  valley_idx  end_idx  peak_val  valley_val  \\\n",
      "0   0    0         0          1           1        2       2.0         1.0   \n",
      "1   1    0         2          3           3        4       3.0         1.0   \n",
      "\n",
      "   end_val  status  \n",
      "0      2.0       1  \n",
      "1      3.0       1  \n",
      "   id  col  peak_idx  start_idx  valley_idx  end_idx  peak_val  valley_val  \\\n",
      "0   0    0         0          1           1        2       2.0         1.0   \n",
      "1   1    0         2          3           3        4       3.0         1.0   \n",
      "\n",
      "   end_val  status  \n",
      "0      2.0       1  \n",
      "1      3.0       1  \n",
      "   id  col  peak_idx  start_idx  valley_idx  end_idx  peak_val  valley_val  \\\n",
      "0   0    0         0          1           1        2       2.0         1.0   \n",
      "1   1    0         2          3           3        4       3.0         1.0   \n",
      "2   3    1         1          2           2        3       2.0         1.0   \n",
      "3   4    1         3          4           4        5       3.0         1.0   \n",
      "\n",
      "   end_val  status  \n",
      "0      2.0       1  \n",
      "1      3.0       1  \n",
      "2      2.0       1  \n",
      "3      3.0       1  \n",
      "2.26 ms ± 266 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns.recovered)\n",
    "print(drawdowns['a'].recovered.records)\n",
    "print(drawdowns.recovered['a'].records)\n",
    "print(drawdowns.recovered.records)\n",
    "\n",
    "%timeit big_drawdowns.recovered"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-0.75\n",
      "a   -0.750000\n",
      "b         NaN\n",
      "c   -0.333333\n",
      "d         NaN\n",
      "Name: active_drawdown, dtype: float64\n",
      "2.03 ms ± 48.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].active_drawdown())\n",
    "print(drawdowns.active_drawdown())\n",
    "\n",
    "%timeit big_drawdowns.active_drawdown()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 days 00:00:00\n",
      "a   1 days\n",
      "b      NaT\n",
      "c   3 days\n",
      "d      NaT\n",
      "Name: active_duration, dtype: timedelta64[ns]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/base/array_wrapper.py:661: UserWarning:\n",
      "\n",
      "Couldn't parse the frequency of index. Pass it as `freq` or define it globally under `settings.array_wrapper`.\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.41 ms ± 65.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].active_duration())\n",
    "print(drawdowns.active_duration())\n",
    "\n",
    "%timeit big_drawdowns.active_duration()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0\n",
      "a    0.0\n",
      "b    NaN\n",
      "c    1.0\n",
      "d    NaN\n",
      "Name: active_recovery_return, dtype: float64\n",
      "1.43 ms ± 43.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].active_recovery_return())\n",
    "print(drawdowns.active_recovery_return())\n",
    "\n",
    "%timeit big_drawdowns.active_recovery_return()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 days 00:00:00\n",
      "a   0 days\n",
      "b      NaT\n",
      "c   1 days\n",
      "d      NaT\n",
      "Name: active_recovery_duration, dtype: timedelta64[ns]\n",
      "1.41 ms ± 53.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].active_recovery_duration())\n",
    "print(drawdowns.active_recovery_duration())\n",
    "\n",
    "%timeit big_drawdowns.active_recovery_duration()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Start                          2020-01-01 00:00:00\n",
      "End                            2020-01-06 00:00:00\n",
      "Period                             6 days 00:00:00\n",
      "Coverage [%]                                  50.0\n",
      "Total Records                                    3\n",
      "Total Recovered Drawdowns                        2\n",
      "Total Active Drawdowns                           1\n",
      "Active Drawdown [%]                           75.0\n",
      "Active Duration                    1 days 00:00:00\n",
      "Active Recovery [%]                            0.0\n",
      "Active Recovery Return [%]                     0.0\n",
      "Active Recovery Duration           0 days 00:00:00\n",
      "Max Drawdown [%]                         66.666667\n",
      "Avg Drawdown [%]                         58.333333\n",
      "Max Drawdown Duration              1 days 00:00:00\n",
      "Avg Drawdown Duration              1 days 00:00:00\n",
      "Max Recovery Return [%]                      200.0\n",
      "Avg Recovery Return [%]                      150.0\n",
      "Max Recovery Duration              1 days 00:00:00\n",
      "Avg Recovery Duration              1 days 00:00:00\n",
      "Avg Recovery Duration Ratio                    1.0\n",
      "Name: a, dtype: object\n",
      "21.6 ms ± 115 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "Start                          2020-01-01 00:00:00\n",
      "End                            2020-01-06 00:00:00\n",
      "Period                             6 days 00:00:00\n",
      "Coverage [%]                                  50.0\n",
      "Total Records                                    3\n",
      "Total Recovered Drawdowns                        2\n",
      "Total Active Drawdowns                           1\n",
      "Active Drawdown [%]                           75.0\n",
      "Active Duration                    1 days 00:00:00\n",
      "Active Recovery [%]                            0.0\n",
      "Active Recovery Return [%]                     0.0\n",
      "Active Recovery Duration           0 days 00:00:00\n",
      "Max Drawdown [%]                         66.666667\n",
      "Avg Drawdown [%]                         58.333333\n",
      "Max Drawdown Duration              1 days 00:00:00\n",
      "Avg Drawdown Duration              1 days 00:00:00\n",
      "Max Recovery Return [%]                      200.0\n",
      "Avg Recovery Return [%]                      150.0\n",
      "Max Recovery Duration              1 days 00:00:00\n",
      "Avg Recovery Duration              1 days 00:00:00\n",
      "Avg Recovery Duration Ratio                    1.0\n",
      "Name: a, dtype: object\n",
      "44.9 ms ± 2.18 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "Start                          2020-01-01 00:00:00\n",
      "End                            2020-01-06 00:00:00\n",
      "Period                             6 days 00:00:00\n",
      "Coverage [%]                             44.444444\n",
      "Total Records                                  1.5\n",
      "Total Recovered Drawdowns                      1.0\n",
      "Total Active Drawdowns                         0.5\n",
      "Active Drawdown [%]                      54.166667\n",
      "Active Duration                    2 days 00:00:00\n",
      "Active Recovery [%]                           25.0\n",
      "Active Recovery Return [%]                    50.0\n",
      "Active Recovery Duration           0 days 12:00:00\n",
      "Max Drawdown [%]                         66.666667\n",
      "Avg Drawdown [%]                         58.333333\n",
      "Max Drawdown Duration              1 days 00:00:00\n",
      "Avg Drawdown Duration              1 days 00:00:00\n",
      "Max Recovery Return [%]                      200.0\n",
      "Avg Recovery Return [%]                      150.0\n",
      "Max Recovery Duration              1 days 00:00:00\n",
      "Avg Recovery Duration              1 days 00:00:00\n",
      "Avg Recovery Duration Ratio                    1.0\n",
      "Name: agg_func_mean, dtype: object\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:7: UserWarning: Object has multiple columns. Aggregating using <function mean at 0x7fa020856598>. Pass column to select a single column/group.\n",
      "  import sys\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "45.2 ms ± 757 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(drawdowns['a'].stats())\n",
    "%timeit big_drawdowns[0].stats(silence_warnings=True)\n",
    "\n",
    "print(drawdowns.stats(column='a'))\n",
    "%timeit big_drawdowns.stats(column=0, silence_warnings=True)\n",
    "\n",
    "print(drawdowns.stats())\n",
    "%timeit big_drawdowns.stats(silence_warnings=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-e02067\"><g class=\"clips\"><clipPath id=\"clipe02067xyplot\" class=\"plotclip\"><rect width=\"637\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clipe02067x\"><rect x=\"33\" y=\"0\" width=\"637\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clipe02067y\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clipe02067xy\"><rect x=\"33\" y=\"46\" width=\"637\" height=\"261\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"33\" y=\"46\" width=\"637\" height=\"261\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"><path data-index=\"0\" fill-rule=\"evenodd\" d=\"M69.22,307H182.13V46H69.22Z\" clip-path=\"url(#clipe02067x)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(255, 0, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"1\" fill-rule=\"evenodd\" d=\"M295.04,307H407.96V46H295.04Z\" clip-path=\"url(#clipe02067x)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(255, 0, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"2\" fill-rule=\"evenodd\" d=\"M182.13,307H295.04V46H182.13Z\" clip-path=\"url(#clipe02067x)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 128, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"3\" fill-rule=\"evenodd\" d=\"M407.96,307H520.87V46H407.96Z\" clip-path=\"url(#clipe02067x)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 128, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"4\" fill-rule=\"evenodd\" d=\"M520.87,307H633.78V46H520.87Z\" clip-path=\"url(#clipe02067x)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(255, 165, 0); fill-opacity: 1; stroke-width: 0px;\"/></g></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"><path class=\"xgrid crisp\" transform=\"translate(69.22,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(182.13,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(295.04,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(407.96,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(520.87,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(633.78,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,289.58000000000004)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,251.88)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,214.19)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,176.5)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,138.81)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,101.12)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,63.43)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(33,46)\" clip-path=\"url(#clipe02067xyplot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter trace3d0314d9-edab-490c-bc36-202b795a9060\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M36.22,168.19L149.13,243.58L262.04,92.81L374.96,243.58L487.87,17.43L600.78,243.58\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(36.22,168.19)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(149.13,243.58)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(262.04,92.81)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(374.96,243.58)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(487.87,17.43)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(600.78,243.58)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace8e456aa2-15ae-4cd8-a0a5-e2dfe53188e3\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(36.22,168.19)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter tracec64e6e9d-906c-45d6-bd55-8341973d52d5\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(149.13,243.58)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(374.96,243.58)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter traceedea4b1f-59b6-47b7-9f7e-29bd02af203d\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(262.04,92.81)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(487.87,17.43)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace2aeee0a8-10ac-430f-a01f-ff2158531677\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(600.78,243.58)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" transform=\"translate(69.22,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\"><tspan class=\"line\" dy=\"0em\" x=\"0\" y=\"320\">Jan 1</tspan><tspan class=\"line\" dy=\"1.3em\" x=\"0\" y=\"320\">2020</tspan></text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(182.13,0)\">Jan 2</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(295.04,0)\">Jan 3</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(407.96,0)\">Jan 4</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(520.87,0)\">Jan 5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(633.78,0)\">Jan 6</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" transform=\"translate(0,289.58000000000004)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">1</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,251.88)\">1.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,214.19)\">2</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,176.5)\">2.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,138.81)\">3</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,101.12)\">3.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,63.43)\">4</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-e02067\"><g class=\"clips\"/><clipPath id=\"legende02067\"><rect width=\"424\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(246,11.779999999999994)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\" width=\"424\" height=\"29\" x=\"0\" y=\"0\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legende02067)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">a</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"49.71875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(52.21875,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Peak</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"71.203125\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(125.921875,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Valley</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"78.75\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(207.171875,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Recovery/Peak</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"132.15625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(341.828125,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Active</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"79.234375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\" x=\"0\" y=\"0\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "drawdowns['a'].plot().show_svg()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-36aee7\"><g class=\"clips\"><clipPath id=\"clip36aee7xyplot\" class=\"plotclip\"><rect width=\"637\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clip36aee7x\"><rect x=\"33\" y=\"0\" width=\"637\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clip36aee7y\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clip36aee7xy\"><rect x=\"33\" y=\"46\" width=\"637\" height=\"261\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"33\" y=\"46\" width=\"637\" height=\"261\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"><path data-index=\"0\" fill-rule=\"evenodd\" d=\"M520.74,307H633.78V46H520.74Z\" clip-path=\"url(#clip36aee7x)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(255, 165, 0); fill-opacity: 1; stroke-width: 0px;\"/></g></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"><path class=\"xgrid crisp\" transform=\"translate(68.6,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(181.64,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(294.67,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(407.71,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(520.74,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(633.78,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,289.58000000000004)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,251.88)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,214.19)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,176.5)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,138.81)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,101.12)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,63.43)\" d=\"M33,0h637\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(33,46)\" clip-path=\"url(#clip36aee7xyplot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter trace36f1672b-06da-42f9-8948-bb7e08e1231a\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M35.6,168.19L148.64,243.58L261.67,92.81L374.71,243.58L487.74,17.43L600.78,243.58\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(35.6,168.19)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(148.64,243.58)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(261.67,92.81)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(374.71,243.58)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(487.74,17.43)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(600.78,243.58)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter traceace3f1eb-c8ba-4a20-b989-8a05030c6a33\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(487.74,17.43)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace15683892-57bb-41f8-aa30-d99e6c7b8d0f\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(600.78,243.58)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" transform=\"translate(68.6,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\"><tspan class=\"line\" dy=\"0em\" x=\"0\" y=\"320\">Jan 1</tspan><tspan class=\"line\" dy=\"1.3em\" x=\"0\" y=\"320\">2020</tspan></text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(181.64,0)\">Jan 2</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(294.67,0)\">Jan 3</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(407.71,0)\">Jan 4</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(520.74,0)\">Jan 5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(633.78,0)\">Jan 6</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" transform=\"translate(0,289.58000000000004)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">1</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,251.88)\">1.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,214.19)\">2</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,176.5)\">2.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,138.81)\">3</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,101.12)\">3.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,63.43)\">4</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-36aee7\"><g class=\"clips\"/><clipPath id=\"legend36aee7\"><rect width=\"208\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(462,11.779999999999994)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"208\" height=\"29\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legend36aee7)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">a</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"49.71875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(52.21875,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Peak</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"71.203125\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(125.921875,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Active</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"79.234375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "drawdowns.plot(column='a', top_n=1).show_svg()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"750\" height=\"380\" style=\"\" viewBox=\"0 0 750 380\"><rect x=\"0\" y=\"0\" width=\"750\" height=\"380\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-ae7538\"><g class=\"clips\"><clipPath id=\"clipae7538xyplot\" class=\"plotclip\"><rect width=\"687\" height=\"245\"/></clipPath><clipPath class=\"axesclip\" id=\"clipae7538x\"><rect x=\"33\" y=\"0\" width=\"687\" height=\"380\"/></clipPath><clipPath class=\"axesclip\" id=\"clipae7538y\"><rect x=\"0\" y=\"67\" width=\"750\" height=\"245\"/></clipPath><clipPath class=\"axesclip\" id=\"clipae7538xy\"><rect x=\"33\" y=\"67\" width=\"687\" height=\"245\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"33\" y=\"67\" width=\"687\" height=\"245\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"><path data-index=\"0\" fill-rule=\"evenodd\" d=\"M71.72999999999999,312H193.64V67H71.72999999999999Z\" clip-path=\"url(#clipae7538x)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(255, 0, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"1\" fill-rule=\"evenodd\" d=\"M315.55,312H437.45V67H315.55Z\" clip-path=\"url(#clipae7538x)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(255, 0, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"2\" fill-rule=\"evenodd\" d=\"M193.64,312H315.55V67H193.64Z\" clip-path=\"url(#clipae7538x)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 128, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"3\" fill-rule=\"evenodd\" d=\"M437.45,312H559.36V67H437.45Z\" clip-path=\"url(#clipae7538x)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 128, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"4\" fill-rule=\"evenodd\" d=\"M559.36,312H681.27V67H559.36Z\" clip-path=\"url(#clipae7538x)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(255, 165, 0); fill-opacity: 1; stroke-width: 0px;\"/></g></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"><path class=\"xgrid crisp\" transform=\"translate(71.72999999999999,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(193.64,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(315.55,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(437.45,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(559.36,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(681.27,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,295.38)\" d=\"M33,0h687\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,260.08000000000004)\" d=\"M33,0h687\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,224.79)\" d=\"M33,0h687\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,189.5)\" d=\"M33,0h687\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,154.20999999999998)\" d=\"M33,0h687\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,118.92)\" d=\"M33,0h687\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,83.63)\" d=\"M33,0h687\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(33,67)\" clip-path=\"url(#clipae7538xyplot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter tracedd57ca0d-5793-497e-9812-f7d31fbf3d38\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M38.73,157.79L160.64,228.38L282.55,87.21L404.45,228.38L526.36,16.63L648.27,228.38\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(38.73,157.79)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(160.64,228.38)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(282.55,87.21)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(404.45,228.38)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(526.36,16.63)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(648.27,228.38)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace45fa78fb-49eb-4e91-9b83-57ea21befd64\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(38.73,157.79)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter tracebfe08fe9-c13e-4667-8415-eb5f4da4b59c\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(160.64,228.38)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(404.45,228.38)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter tracec4191072-f9a7-49b1-81eb-c133276a3d1e\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(282.55,87.21)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(526.36,16.63)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter tracea36a4ee9-7f8c-4475-90ec-2694291c0a45\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(648.27,228.38)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" transform=\"translate(71.72999999999999,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\"><tspan class=\"line\" dy=\"0em\" x=\"0\" y=\"325\">Jan 1</tspan><tspan class=\"line\" dy=\"1.3em\" x=\"0\" y=\"325\">2020</tspan></text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(193.64,0)\">Jan 2</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(315.55,0)\">Jan 3</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(437.45,0)\">Jan 4</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(559.36,0)\">Jan 5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(681.27,0)\">Jan 6</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" transform=\"translate(0,295.38)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">1</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,260.08000000000004)\">1.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,224.79)\">2</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,189.5)\">2.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,154.20999999999998)\">3</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,118.92)\">3.5</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"32\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,83.63)\">4</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-ae7538\"><g class=\"clips\"/><clipPath id=\"legendae7538\"><rect width=\"424\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(296,12.210526315789501)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"424\" height=\"29\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legendae7538)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">a</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"49.71875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(52.21875,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Peak</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"71.203125\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(125.921875,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Valley</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"78.75\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(207.171875,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Recovery/Peak</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"132.15625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(341.828125,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Active</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M4.55,0L0,4.55L-4.55,0L0,-4.55Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"79.234375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"><text class=\"xtitle\" x=\"376.5\" y=\"367.909375\" text-anchor=\"middle\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 14px; fill: rgb(42, 63, 95); opacity: 1; font-weight: normal; white-space: pre;\">Index</text></g><g class=\"g-ytitle\"/><g class=\"annotation\" data-index=\"0\" style=\"opacity: 1;\"><g class=\"annotation-text-g\" transform=\"rotate(0,376.5,55)\"><g class=\"cursor-pointer\" transform=\"translate(328,43)\"><rect class=\"bg\" x=\"0.5\" y=\"0.5\" width=\"96\" height=\"23\" style=\"stroke-width: 1px; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 0, 0); fill-opacity: 0;\"/><text class=\"annotation-text\" text-anchor=\"middle\" x=\"48.546875\" y=\"18\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 16px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Drawdowns</text></g></g></g></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "drawdowns['a'].plots().show_svg()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Orders"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            a  b  c  d\n",
      "2020-01-01  1  1  1  1\n",
      "2020-01-02  2  2  2  2\n",
      "2020-01-03  3  3  3  3\n",
      "2020-01-04  4  4  4  4\n",
      "2020-01-05  5  5  5  5\n",
      "2020-01-06  6  6  6  6\n",
      "2020-01-07  7  7  7  7\n",
      "2020-01-08  8  8  8  8\n"
     ]
    }
   ],
   "source": [
    "close = pd.Series([1, 2, 3, 4, 5, 6, 7, 8], index=[\n",
    "    datetime(2020, 1, 1),\n",
    "    datetime(2020, 1, 2),\n",
    "    datetime(2020, 1, 3),\n",
    "    datetime(2020, 1, 4),\n",
    "    datetime(2020, 1, 5),\n",
    "    datetime(2020, 1, 6),\n",
    "    datetime(2020, 1, 7),\n",
    "    datetime(2020, 1, 8)\n",
    "]).vbt.tile(4, keys=['a', 'b', 'c', 'd'])\n",
    "print(close)\n",
    "\n",
    "big_close = pd.DataFrame(np.random.uniform(1, 10, size=(1000, 1000)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(21,)\n"
     ]
    }
   ],
   "source": [
    "from vectorbt.portfolio.enums import order_dt\n",
    "\n",
    "records_arr = np.asarray([\n",
    "    (0, 0, 0, 1. , 1., 0.01 , 0), (1, 0, 1, 0.1, 2., 0.002, 0),\n",
    "    (2, 0, 2, 1. , 3., 0.03 , 1), (3, 0, 3, 0.1, 4., 0.004, 1),\n",
    "    (4, 0, 5, 1. , 6., 0.06 , 0), (5, 0, 6, 1. , 7., 0.07 , 1),\n",
    "    (6, 0, 7, 2. , 8., 0.16 , 0), (7, 1, 0, 1. , 1., 0.01 , 1),\n",
    "    (8, 1, 1, 0.1, 2., 0.002, 1), (9, 1, 2, 1. , 3., 0.03 , 0),\n",
    "    (10, 1, 3, 0.1, 4., 0.004, 0), (11, 1, 5, 1. , 6., 0.06 , 1),\n",
    "    (12, 1, 6, 1. , 7., 0.07 , 0), (13, 1, 7, 2. , 8., 0.16 , 1),\n",
    "    (14, 2, 0, 1. , 1., 0.01 , 0), (15, 2, 1, 0.1, 2., 0.002, 0),\n",
    "    (16, 2, 2, 1. , 3., 0.03 , 1), (17, 2, 3, 0.1, 4., 0.004, 1),\n",
    "    (18, 2, 5, 1. , 6., 0.06 , 0), (19, 2, 6, 2. , 7., 0.14 , 1),\n",
    "    (20, 2, 7, 2. , 8., 0.16 , 0)\n",
    "], dtype=order_dt)\n",
    "print(records_arr.shape)\n",
    "\n",
    "wrapper = vbt.ArrayWrapper.from_obj(close, freq='1 days')\n",
    "orders = vbt.Orders(wrapper, records_arr, close)\n",
    "orders_grouped = vbt.Orders(wrapper.regroup(group_by), records_arr, close)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1000000,)\n"
     ]
    }
   ],
   "source": [
    "big_records_arr = np.asarray(list(zip(*(\n",
    "    np.arange(1000000),\n",
    "    np.tile(np.arange(1000), 1000),\n",
    "    np.repeat(np.arange(1000), 1000),\n",
    "    np.full(1000000, 10),\n",
    "    np.random.uniform(1, 10, size=1000000),\n",
    "    np.full(1000000, 1),\n",
    "    np.full(1000000, 1)\n",
    "))), dtype=order_dt)\n",
    "big_records_arr['side'][::2] = 0\n",
    "print(big_records_arr.shape)\n",
    "\n",
    "big_wrapper = vbt.ArrayWrapper.from_obj(big_close, freq='1 days')\n",
    "big_orders = vbt.Orders(big_wrapper, big_records_arr, big_close)\n",
    "big_orders_grouped = vbt.Orders(big_wrapper.copy(group_by=big_group_by), big_records_arr, big_close)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    id  col  idx  size  price   fees  side\n",
      "0    0    0    0   1.0    1.0  0.010     0\n",
      "1    1    0    1   0.1    2.0  0.002     0\n",
      "2    2    0    2   1.0    3.0  0.030     1\n",
      "3    3    0    3   0.1    4.0  0.004     1\n",
      "4    4    0    5   1.0    6.0  0.060     0\n",
      "5    5    0    6   1.0    7.0  0.070     1\n",
      "6    6    0    7   2.0    8.0  0.160     0\n",
      "7    7    1    0   1.0    1.0  0.010     1\n",
      "8    8    1    1   0.1    2.0  0.002     1\n",
      "9    9    1    2   1.0    3.0  0.030     0\n",
      "10  10    1    3   0.1    4.0  0.004     0\n",
      "11  11    1    5   1.0    6.0  0.060     1\n",
      "12  12    1    6   1.0    7.0  0.070     0\n",
      "13  13    1    7   2.0    8.0  0.160     1\n",
      "14  14    2    0   1.0    1.0  0.010     0\n",
      "15  15    2    1   0.1    2.0  0.002     0\n",
      "16  16    2    2   1.0    3.0  0.030     1\n",
      "17  17    2    3   0.1    4.0  0.004     1\n",
      "18  18    2    5   1.0    6.0  0.060     0\n",
      "19  19    2    6   2.0    7.0  0.140     1\n",
      "20  20    2    7   2.0    8.0  0.160     0\n",
      "            a  b  c  d\n",
      "2020-01-01  1  1  1  1\n",
      "2020-01-02  2  2  2  2\n",
      "2020-01-03  3  3  3  3\n",
      "2020-01-04  4  4  4  4\n",
      "2020-01-05  5  5  5  5\n",
      "2020-01-06  6  6  6  6\n",
      "2020-01-07  7  7  7  7\n",
      "2020-01-08  8  8  8  8\n",
      "   id  col  idx  size  price   fees  side\n",
      "0   0    0    0   1.0    1.0  0.010     0\n",
      "1   1    0    1   0.1    2.0  0.002     0\n",
      "2   2    0    2   1.0    3.0  0.030     1\n",
      "3   3    0    3   0.1    4.0  0.004     1\n",
      "4   4    0    5   1.0    6.0  0.060     0\n",
      "5   5    0    6   1.0    7.0  0.070     1\n",
      "6   6    0    7   2.0    8.0  0.160     0\n",
      "2020-01-01    1\n",
      "2020-01-02    2\n",
      "2020-01-03    3\n",
      "2020-01-04    4\n",
      "2020-01-05    5\n",
      "2020-01-06    6\n",
      "2020-01-07    7\n",
      "2020-01-08    8\n",
      "Name: a, dtype: int64\n",
      "1.06 ms ± 17.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "12.5 ms ± 2.47 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "13.5 ms ± 1.52 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "13 ms ± 4.86 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(orders.records)\n",
    "print(orders.close)\n",
    "\n",
    "print(orders['a'].records)\n",
    "print(orders['a'].close)\n",
    "\n",
    "%timeit big_orders.iloc[0]\n",
    "%timeit big_orders.iloc[:]\n",
    "\n",
    "%timeit big_orders_grouped.iloc[0]\n",
    "%timeit big_orders_grouped.iloc[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    Order Id Column  Timestamp  Size  Price   Fees  Side\n",
      "0          0      a 2020-01-01   1.0    1.0  0.010   Buy\n",
      "1          1      a 2020-01-02   0.1    2.0  0.002   Buy\n",
      "2          2      a 2020-01-03   1.0    3.0  0.030  Sell\n",
      "3          3      a 2020-01-04   0.1    4.0  0.004  Sell\n",
      "4          4      a 2020-01-06   1.0    6.0  0.060   Buy\n",
      "5          5      a 2020-01-07   1.0    7.0  0.070  Sell\n",
      "6          6      a 2020-01-08   2.0    8.0  0.160   Buy\n",
      "7          7      b 2020-01-01   1.0    1.0  0.010  Sell\n",
      "8          8      b 2020-01-02   0.1    2.0  0.002  Sell\n",
      "9          9      b 2020-01-03   1.0    3.0  0.030   Buy\n",
      "10        10      b 2020-01-04   0.1    4.0  0.004   Buy\n",
      "11        11      b 2020-01-06   1.0    6.0  0.060  Sell\n",
      "12        12      b 2020-01-07   1.0    7.0  0.070   Buy\n",
      "13        13      b 2020-01-08   2.0    8.0  0.160  Sell\n",
      "14        14      c 2020-01-01   1.0    1.0  0.010   Buy\n",
      "15        15      c 2020-01-02   0.1    2.0  0.002   Buy\n",
      "16        16      c 2020-01-03   1.0    3.0  0.030  Sell\n",
      "17        17      c 2020-01-04   0.1    4.0  0.004  Sell\n",
      "18        18      c 2020-01-06   1.0    6.0  0.060   Buy\n",
      "19        19      c 2020-01-07   2.0    7.0  0.140  Sell\n",
      "20        20      c 2020-01-08   2.0    8.0  0.160   Buy\n"
     ]
    }
   ],
   "source": [
    "print(orders.records_readable)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Orders(**Config({\n",
      "    \"wrapper\": \"<vectorbt.base.array_wrapper.ArrayWrapper object at 0x7f9f78606d30> of shape (8, 4)\",\n",
      "    \"records_arr\": \"<numpy.ndarray object at 0x7f9f780709d0> of shape (11,)\",\n",
      "    \"col_mapper\": null,\n",
      "    \"close\": \"<pandas.core.frame.DataFrame object at 0x7f9f782a4390> of shape (8, 4)\"\n",
      "}))\n",
      "   id  col  idx  size  price   fees  side\n",
      "0   0    0    0   1.0    1.0  0.010     0\n",
      "1   1    0    1   0.1    2.0  0.002     0\n",
      "2   4    0    5   1.0    6.0  0.060     0\n",
      "3   6    0    7   2.0    8.0  0.160     0\n",
      "   id  col  idx  size  price   fees  side\n",
      "0   0    0    0   1.0    1.0  0.010     0\n",
      "1   1    0    1   0.1    2.0  0.002     0\n",
      "2   4    0    5   1.0    6.0  0.060     0\n",
      "3   6    0    7   2.0    8.0  0.160     0\n",
      "    id  col  idx  size  price   fees  side\n",
      "0    0    0    0   1.0    1.0  0.010     0\n",
      "1    1    0    1   0.1    2.0  0.002     0\n",
      "2    4    0    5   1.0    6.0  0.060     0\n",
      "3    6    0    7   2.0    8.0  0.160     0\n",
      "4    9    1    2   1.0    3.0  0.030     0\n",
      "5   10    1    3   0.1    4.0  0.004     0\n",
      "6   12    1    6   1.0    7.0  0.070     0\n",
      "7   14    2    0   1.0    1.0  0.010     0\n",
      "8   15    2    1   0.1    2.0  0.002     0\n",
      "9   18    2    5   1.0    6.0  0.060     0\n",
      "10  20    2    7   2.0    8.0  0.160     0\n",
      "11.1 ms ± 387 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(orders.buy)\n",
    "print(orders['a'].buy.records)\n",
    "print(orders.buy['a'].records)\n",
    "print(orders.buy.records)\n",
    "\n",
    "%timeit big_orders.buy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Orders(**Config({\n",
      "    \"wrapper\": \"<vectorbt.base.array_wrapper.ArrayWrapper object at 0x7f9f78606d30> of shape (8, 4)\",\n",
      "    \"records_arr\": \"<numpy.ndarray object at 0x7fa0223c06b8> of shape (10,)\",\n",
      "    \"col_mapper\": null,\n",
      "    \"close\": \"<pandas.core.frame.DataFrame object at 0x7f9f782a4390> of shape (8, 4)\"\n",
      "}))\n",
      "   id  col  idx  size  price   fees  side\n",
      "0   2    0    2   1.0    3.0  0.030     1\n",
      "1   3    0    3   0.1    4.0  0.004     1\n",
      "2   5    0    6   1.0    7.0  0.070     1\n",
      "   id  col  idx  size  price   fees  side\n",
      "0   2    0    2   1.0    3.0  0.030     1\n",
      "1   3    0    3   0.1    4.0  0.004     1\n",
      "2   5    0    6   1.0    7.0  0.070     1\n",
      "   id  col  idx  size  price   fees  side\n",
      "0   2    0    2   1.0    3.0  0.030     1\n",
      "1   3    0    3   0.1    4.0  0.004     1\n",
      "2   5    0    6   1.0    7.0  0.070     1\n",
      "3   7    1    0   1.0    1.0  0.010     1\n",
      "4   8    1    1   0.1    2.0  0.002     1\n",
      "5  11    1    5   1.0    6.0  0.060     1\n",
      "6  13    1    7   2.0    8.0  0.160     1\n",
      "7  16    2    2   1.0    3.0  0.030     1\n",
      "8  17    2    3   0.1    4.0  0.004     1\n",
      "9  19    2    6   2.0    7.0  0.140     1\n",
      "10.7 ms ± 117 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(orders.sell)\n",
    "print(orders['a'].sell.records)\n",
    "print(orders.sell['a'].records)\n",
    "print(orders.sell.records)\n",
    "\n",
    "%timeit big_orders.sell"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Start                2020-01-01 00:00:00\n",
      "End                  2020-01-08 00:00:00\n",
      "Period                   8 days 00:00:00\n",
      "Total Records                          7\n",
      "Total Buy Orders                       4\n",
      "Total Sell Orders                      3\n",
      "Min Size                             0.1\n",
      "Max Size                             2.0\n",
      "Avg Size                        0.885714\n",
      "Avg Buy Size                       1.025\n",
      "Avg Sell Size                        0.7\n",
      "Avg Buy Price                       4.25\n",
      "Avg Sell Price                  4.666667\n",
      "Total Fees                         0.336\n",
      "Min Fees                           0.002\n",
      "Max Fees                            0.16\n",
      "Avg Fees                           0.048\n",
      "Avg Buy Fees                       0.058\n",
      "Avg Sell Fees                   0.034667\n",
      "Name: a, dtype: object\n",
      "14 ms ± 171 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "Start                2020-01-01 00:00:00\n",
      "End                  2020-01-08 00:00:00\n",
      "Period                   8 days 00:00:00\n",
      "Total Records                          7\n",
      "Total Buy Orders                       4\n",
      "Total Sell Orders                      3\n",
      "Min Size                             0.1\n",
      "Max Size                             2.0\n",
      "Avg Size                        0.885714\n",
      "Avg Buy Size                       1.025\n",
      "Avg Sell Size                        0.7\n",
      "Avg Buy Price                       4.25\n",
      "Avg Sell Price                  4.666667\n",
      "Total Fees                         0.336\n",
      "Min Fees                           0.002\n",
      "Max Fees                            0.16\n",
      "Avg Fees                           0.048\n",
      "Avg Buy Fees                       0.058\n",
      "Avg Sell Fees                   0.034667\n",
      "Name: a, dtype: object\n",
      "85.6 ms ± 3.18 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "Start                2020-01-01 00:00:00\n",
      "End                  2020-01-08 00:00:00\n",
      "Period                   8 days 00:00:00\n",
      "Total Records                       5.25\n",
      "Total Buy Orders                    2.75\n",
      "Total Sell Orders                    2.5\n",
      "Min Size                             0.1\n",
      "Max Size                             2.0\n",
      "Avg Size                        0.933333\n",
      "Avg Buy Size                    0.916667\n",
      "Avg Sell Size                   0.919444\n",
      "Avg Buy Price                   4.388889\n",
      "Avg Sell Price                  4.527778\n",
      "Total Fees                        0.2695\n",
      "Min Fees                           0.002\n",
      "Max Fees                            0.16\n",
      "Avg Fees                        0.051333\n",
      "Avg Buy Fees                    0.050222\n",
      "Avg Sell Fees                   0.050222\n",
      "Name: agg_func_mean, dtype: object\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:7: UserWarning: Object has multiple columns. Aggregating using <function mean at 0x7fa020856598>. Pass column to select a single column/group.\n",
      "  import sys\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "84.7 ms ± 2.13 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(orders['a'].stats())\n",
    "%timeit big_orders[0].stats(silence_warnings=True)\n",
    "\n",
    "print(orders.stats(column='a'))\n",
    "%timeit big_orders.stats(column=0, silence_warnings=True)\n",
    "\n",
    "print(orders.stats())\n",
    "%timeit big_orders.stats(silence_warnings=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-f204e7\"><g class=\"clips\"><clipPath id=\"clipf204e7xyplot\" class=\"plotclip\"><rect width=\"640\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clipf204e7x\"><rect x=\"30\" y=\"0\" width=\"640\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clipf204e7y\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clipf204e7xy\"><rect x=\"30\" y=\"46\" width=\"640\" height=\"261\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"30\" y=\"46\" width=\"640\" height=\"261\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"><path class=\"xgrid crisp\" transform=\"translate(67,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(147.86,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(228.71,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(309.57,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(390.43,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(471.29,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(552.14,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(633,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,256.82)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,192.56)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,128.31)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,64.05)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(30,46)\" clip-path=\"url(#clipf204e7xyplot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter trace615bd783-5476-4ca3-8638-ccc06f1ffe19\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M37,242.95L603,18.05\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(37,242.95)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(117.86,210.82)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(198.71,178.69)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(279.57,146.56)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(360.43,114.44)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(441.29,82.31)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(522.14,50.18)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(603,18.05)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace3377c003-a12c-4035-9261-e2d784ec629a\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(37,242.95)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(117.86,210.82)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(441.29,82.31)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(603,18.05)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace60a21374-073b-4dfd-a4cb-8ec3d5f6feaf\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(198.71,178.69)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(279.57,146.56)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(522.14,50.18)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" transform=\"translate(67,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\"><tspan class=\"line\" dy=\"0em\" x=\"0\" y=\"320\">Jan 1</tspan><tspan class=\"line\" dy=\"1.3em\" x=\"0\" y=\"320\">2020</tspan></text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(147.86,0)\">Jan 2</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(228.71,0)\">Jan 3</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(309.57,0)\">Jan 4</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(390.43,0)\">Jan 5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(471.29,0)\">Jan 6</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(552.14,0)\">Jan 7</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(633,0)\">Jan 8</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" transform=\"translate(0,256.82)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">2</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,192.56)\">4</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,128.31)\">6</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,64.05)\">8</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-f204e7\"><g class=\"clips\"/><clipPath id=\"legendf204e7\"><rect width=\"213\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(457,11.779999999999994)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\" width=\"213\" height=\"29\" x=\"0\" y=\"0\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legendf204e7)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Close</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"74.859375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(77.359375,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Buy</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"65.421875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(145.28125,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Sell</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"64.4375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\" x=\"0\" y=\"0\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "orders['a'].plot().show_svg()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-88ebb4\"><g class=\"clips\"><clipPath id=\"clip88ebb4xyplot\" class=\"plotclip\"><rect width=\"640\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clip88ebb4x\"><rect x=\"30\" y=\"0\" width=\"640\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clip88ebb4y\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clip88ebb4xy\"><rect x=\"30\" y=\"46\" width=\"640\" height=\"261\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"30\" y=\"46\" width=\"640\" height=\"261\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"><path class=\"xgrid crisp\" transform=\"translate(67,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(147.86,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(228.71,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(309.57,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(390.43,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(471.29,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(552.14,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(633,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,256.82)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,192.56)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,128.31)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,64.05)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(30,46)\" clip-path=\"url(#clip88ebb4xyplot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter trace0d852ff7-75c2-4f03-97f1-dd0253cece74\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M37,242.95L603,18.05\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(37,242.95)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(117.86,210.82)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(198.71,178.69)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(279.57,146.56)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(360.43,114.44)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(441.29,82.31)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(522.14,50.18)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(603,18.05)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace315f912d-976c-4ba9-bf56-e68eca08a10b\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(37,242.95)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(117.86,210.82)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(441.29,82.31)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(603,18.05)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace83f2cb70-acfb-41e8-be9e-4c34beeb1a98\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(198.71,178.69)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(279.57,146.56)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(522.14,50.18)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" transform=\"translate(67,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\"><tspan class=\"line\" dy=\"0em\" x=\"0\" y=\"320\">Jan 1</tspan><tspan class=\"line\" dy=\"1.3em\" x=\"0\" y=\"320\">2020</tspan></text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(147.86,0)\">Jan 2</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(228.71,0)\">Jan 3</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(309.57,0)\">Jan 4</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(390.43,0)\">Jan 5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(471.29,0)\">Jan 6</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(552.14,0)\">Jan 7</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(633,0)\">Jan 8</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" transform=\"translate(0,256.82)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">2</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,192.56)\">4</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,128.31)\">6</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,64.05)\">8</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-88ebb4\"><g class=\"clips\"/><clipPath id=\"legend88ebb4\"><rect width=\"213\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(457,11.779999999999994)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"213\" height=\"29\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legend88ebb4)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Close</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"74.859375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(77.359375,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Buy</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"65.421875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(145.28125,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Sell</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"64.4375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "orders.plot(column='a').show_svg()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"750\" height=\"380\" style=\"\" viewBox=\"0 0 750 380\"><rect x=\"0\" y=\"0\" width=\"750\" height=\"380\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-de2bd3\"><g class=\"clips\"><clipPath id=\"clipde2bd3xyplot\" class=\"plotclip\"><rect width=\"675\" height=\"245\"/></clipPath><clipPath class=\"axesclip\" id=\"clipde2bd3x\"><rect x=\"45\" y=\"0\" width=\"675\" height=\"380\"/></clipPath><clipPath class=\"axesclip\" id=\"clipde2bd3y\"><rect x=\"0\" y=\"67\" width=\"750\" height=\"245\"/></clipPath><clipPath class=\"axesclip\" id=\"clipde2bd3xy\"><rect x=\"45\" y=\"67\" width=\"675\" height=\"245\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"45\" y=\"67\" width=\"675\" height=\"245\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"><path class=\"xgrid crisp\" transform=\"translate(83.75,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(169.11,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(254.46,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(339.82,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(425.18,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(510.54,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(595.89,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(681.25,0)\" d=\"M0,67v245\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,264.68)\" d=\"M45,0h675\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,204.54)\" d=\"M45,0h675\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,144.39)\" d=\"M45,0h675\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,84.25)\" d=\"M45,0h675\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(45,67)\" clip-path=\"url(#clipde2bd3xyplot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter trace2184e6aa-811e-43d4-8dd8-c056817cdfac\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M38.75,227.75L636.25,17.25\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(38.75,227.75)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(124.11,197.68)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(209.46,167.61)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(294.82,137.54)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(380.18,107.46)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(465.54,77.39)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(550.89,47.32)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(636.25,17.25)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace7e6ef513-d5e0-464a-ac9a-c92c1c10ab01\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(38.75,227.75)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(124.11,197.68)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(465.54,77.39)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(636.25,17.25)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter tracec50e2a47-4128-42c5-9bac-2913adb30770\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(209.46,167.61)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(294.82,137.54)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(550.89,47.32)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" transform=\"translate(83.75,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\"><tspan class=\"line\" dy=\"0em\" x=\"0\" y=\"325\">Jan 1</tspan><tspan class=\"line\" dy=\"1.3em\" x=\"0\" y=\"325\">2020</tspan></text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(169.11,0)\">Jan 2</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(254.46,0)\">Jan 3</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(339.82,0)\">Jan 4</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(425.18,0)\">Jan 5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(510.54,0)\">Jan 6</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(595.89,0)\">Jan 7</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"325\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(681.25,0)\">Jan 8</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"44\" y=\"4.199999999999999\" transform=\"translate(0,264.68)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">2</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"44\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,204.54)\">4</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"44\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,144.39)\">6</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"44\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,84.25)\">8</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-de2bd3\"><g class=\"clips\"/><clipPath id=\"legendde2bd3\"><rect width=\"213\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(507,12.210526315789501)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\" width=\"213\" height=\"29\" x=\"0\" y=\"0\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legendde2bd3)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Close</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"74.859375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(77.359375,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Buy</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M-4.62,2H4.62L0,-4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"65.421875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(145.28125,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Sell</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M-4.62,-2H4.62L0,4Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"64.4375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\" x=\"0\" y=\"0\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"><text class=\"xtitle\" x=\"382.5\" y=\"367.909375\" text-anchor=\"middle\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 14px; fill: rgb(42, 63, 95); opacity: 1; font-weight: normal; white-space: pre;\">Index</text></g><g class=\"g-ytitle\" transform=\"translate(2.4404296875,0)\"><text class=\"ytitle\" transform=\"rotate(-90,11.559375000000003,189.5)\" x=\"11.559375000000003\" y=\"189.5\" text-anchor=\"middle\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 14px; fill: rgb(42, 63, 95); opacity: 1; font-weight: normal; white-space: pre;\">Price</text></g><g class=\"annotation\" data-index=\"0\" style=\"opacity: 1;\"><g class=\"annotation-text-g\" transform=\"rotate(0,382.5,55)\"><g class=\"cursor-pointer\" transform=\"translate(354,43)\"><rect class=\"bg\" x=\"0.5\" y=\"0.5\" width=\"57\" height=\"23\" style=\"stroke-width: 1px; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 0, 0); fill-opacity: 0;\"/><text class=\"annotation-text\" text-anchor=\"middle\" x=\"29.046875\" y=\"18\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 16px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Orders</text></g></g></g></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "orders.plots(column='a').show_svg()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Trades"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(13,)\n"
     ]
    }
   ],
   "source": [
    "trades = vbt.ExitTrades.from_orders(orders)\n",
    "trades_grouped = vbt.ExitTrades.from_orders(orders_grouped)\n",
    "print(trades.values.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1000,)\n"
     ]
    }
   ],
   "source": [
    "big_trades = vbt.ExitTrades.from_orders(big_orders)\n",
    "big_trades_grouped = vbt.ExitTrades.from_orders(big_orders_grouped)\n",
    "print(big_trades.values.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.55 ms ± 46.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit vbt.ExitTrades.from_orders(big_orders)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0    0    0   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1    1    0   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2    2    0   1.0          5     6.000000    0.060000         6         7.0   \n",
      "3    3    0   2.0          7     8.000000    0.160000         7         8.0   \n",
      "4    4    1   1.0          0     1.090909    0.010909         2         3.0   \n",
      "5    5    1   0.1          0     1.090909    0.001091         3         4.0   \n",
      "6    6    1   1.0          5     6.000000    0.060000         6         7.0   \n",
      "7    7    1   2.0          7     8.000000    0.160000         7         8.0   \n",
      "8    8    2   1.0          0     1.090909    0.010909         2         3.0   \n",
      "9    9    2   0.1          0     1.090909    0.001091         3         4.0   \n",
      "10  10    2   1.0          5     6.000000    0.060000         6         7.0   \n",
      "11  11    2   1.0          6     7.000000    0.070000         7         8.0   \n",
      "12  12    2   1.0          7     8.000000    0.080000         7         8.0   \n",
      "\n",
      "    exit_fees       pnl    return  direction  status  position_id  \n",
      "0       0.030  1.868182  1.712500          0       1            0  \n",
      "1       0.004  0.285818  2.620000          0       1            0  \n",
      "2       0.070  0.870000  0.145000          0       1            1  \n",
      "3       0.000 -0.160000 -0.010000          0       0            2  \n",
      "4       0.030 -1.950000 -1.787500          1       1            3  \n",
      "5       0.004 -0.296000 -2.713333          1       1            3  \n",
      "6       0.070 -1.130000 -0.188333          1       1            4  \n",
      "7       0.000 -0.160000 -0.010000          1       0            5  \n",
      "8       0.030  1.868182  1.712500          0       1            6  \n",
      "9       0.004  0.285818  2.620000          0       1            6  \n",
      "10      0.070  0.870000  0.145000          0       1            7  \n",
      "11      0.080 -1.150000 -0.164286          1       1            8  \n",
      "12      0.000 -0.080000 -0.010000          0       0            9  \n",
      "            a  b  c  d\n",
      "2020-01-01  1  1  1  1\n",
      "2020-01-02  2  2  2  2\n",
      "2020-01-03  3  3  3  3\n",
      "2020-01-04  4  4  4  4\n",
      "2020-01-05  5  5  5  5\n",
      "2020-01-06  6  6  6  6\n",
      "2020-01-07  7  7  7  7\n",
      "2020-01-08  8  8  8  8\n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1   1    0   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2   2    0   1.0          5     6.000000    0.060000         6         7.0   \n",
      "3   3    0   2.0          7     8.000000    0.160000         7         8.0   \n",
      "\n",
      "   exit_fees       pnl  return  direction  status  position_id  \n",
      "0      0.030  1.868182  1.7125          0       1            0  \n",
      "1      0.004  0.285818  2.6200          0       1            0  \n",
      "2      0.070  0.870000  0.1450          0       1            1  \n",
      "3      0.000 -0.160000 -0.0100          0       0            2  \n",
      "2020-01-01    1\n",
      "2020-01-02    2\n",
      "2020-01-03    3\n",
      "2020-01-04    4\n",
      "2020-01-05    5\n",
      "2020-01-06    6\n",
      "2020-01-07    7\n",
      "2020-01-08    8\n",
      "Name: a, dtype: int64\n",
      "1.56 ms ± 288 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "3.37 ms ± 567 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "2.84 ms ± 218 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "3.65 ms ± 225 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades.records)\n",
    "print(trades.close)\n",
    "\n",
    "print(trades['a'].records)\n",
    "print(trades['a'].close)\n",
    "\n",
    "%timeit big_trades.iloc[0]\n",
    "%timeit big_trades.iloc[:]\n",
    "\n",
    "%timeit big_trades_grouped.iloc[0]\n",
    "%timeit big_trades_grouped.iloc[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    Trade Id Column  Size Entry Timestamp  Avg Entry Price  Entry Fees  \\\n",
      "0          0      a   1.0      2020-01-01         1.090909    0.010909   \n",
      "1          1      a   0.1      2020-01-01         1.090909    0.001091   \n",
      "2          2      a   1.0      2020-01-06         6.000000    0.060000   \n",
      "3          3      a   2.0      2020-01-08         8.000000    0.160000   \n",
      "4          4      b   1.0      2020-01-01         1.090909    0.010909   \n",
      "5          5      b   0.1      2020-01-01         1.090909    0.001091   \n",
      "6          6      b   1.0      2020-01-06         6.000000    0.060000   \n",
      "7          7      b   2.0      2020-01-08         8.000000    0.160000   \n",
      "8          8      c   1.0      2020-01-01         1.090909    0.010909   \n",
      "9          9      c   0.1      2020-01-01         1.090909    0.001091   \n",
      "10        10      c   1.0      2020-01-06         6.000000    0.060000   \n",
      "11        11      c   1.0      2020-01-07         7.000000    0.070000   \n",
      "12        12      c   1.0      2020-01-08         8.000000    0.080000   \n",
      "\n",
      "   Exit Timestamp  Avg Exit Price  Exit Fees       PnL    Return Direction  \\\n",
      "0      2020-01-03             3.0      0.030  1.868182  1.712500      Long   \n",
      "1      2020-01-04             4.0      0.004  0.285818  2.620000      Long   \n",
      "2      2020-01-07             7.0      0.070  0.870000  0.145000      Long   \n",
      "3      2020-01-08             8.0      0.000 -0.160000 -0.010000      Long   \n",
      "4      2020-01-03             3.0      0.030 -1.950000 -1.787500     Short   \n",
      "5      2020-01-04             4.0      0.004 -0.296000 -2.713333     Short   \n",
      "6      2020-01-07             7.0      0.070 -1.130000 -0.188333     Short   \n",
      "7      2020-01-08             8.0      0.000 -0.160000 -0.010000     Short   \n",
      "8      2020-01-03             3.0      0.030  1.868182  1.712500      Long   \n",
      "9      2020-01-04             4.0      0.004  0.285818  2.620000      Long   \n",
      "10     2020-01-07             7.0      0.070  0.870000  0.145000      Long   \n",
      "11     2020-01-08             8.0      0.080 -1.150000 -0.164286     Short   \n",
      "12     2020-01-08             8.0      0.000 -0.080000 -0.010000      Long   \n",
      "\n",
      "    Status  Position Id  \n",
      "0   Closed            0  \n",
      "1   Closed            0  \n",
      "2   Closed            1  \n",
      "3     Open            2  \n",
      "4   Closed            3  \n",
      "5   Closed            3  \n",
      "6   Closed            4  \n",
      "7     Open            5  \n",
      "8   Closed            6  \n",
      "9   Closed            6  \n",
      "10  Closed            7  \n",
      "11  Closed            8  \n",
      "12    Open            9  \n"
     ]
    }
   ],
   "source": [
    "print(trades.records_readable)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4\n",
      "a    4\n",
      "b    4\n",
      "c    5\n",
      "d    0\n",
      "Name: count, dtype: int64\n",
      "49.4 µs ± 504 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n",
      "group\n",
      "first     8\n",
      "second    5\n",
      "Name: count, dtype: int64\n",
      "49 µs ± 303 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades['a'].count())\n",
    "print(trades.count())\n",
    "%timeit big_trades.count()\n",
    "\n",
    "print(trades_grouped.count())\n",
    "%timeit big_trades_grouped.count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Trades(**Config({\n",
      "    \"wrapper\": \"<vectorbt.base.array_wrapper.ArrayWrapper object at 0x7f9f78606d30> of shape (8, 4)\",\n",
      "    \"records_arr\": \"<numpy.ndarray object at 0x7f9f7cf155b0> of shape (6,)\",\n",
      "    \"col_mapper\": null,\n",
      "    \"ts\": null,\n",
      "    \"close\": \"<pandas.core.frame.DataFrame object at 0x7f9f782a4390> of shape (8, 4)\"\n",
      "}))\n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1   1    0   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2   2    0   1.0          5     6.000000    0.060000         6         7.0   \n",
      "\n",
      "   exit_fees       pnl  return  direction  status  position_id  \n",
      "0      0.030  1.868182  1.7125          0       1            0  \n",
      "1      0.004  0.285818  2.6200          0       1            0  \n",
      "2      0.070  0.870000  0.1450          0       1            1  \n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1   1    0   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2   2    0   1.0          5     6.000000    0.060000         6         7.0   \n",
      "\n",
      "   exit_fees       pnl  return  direction  status  position_id  \n",
      "0      0.030  1.868182  1.7125          0       1            0  \n",
      "1      0.004  0.285818  2.6200          0       1            0  \n",
      "2      0.070  0.870000  0.1450          0       1            1  \n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1   1    0   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2   2    0   1.0          5     6.000000    0.060000         6         7.0   \n",
      "3   8    2   1.0          0     1.090909    0.010909         2         3.0   \n",
      "4   9    2   0.1          0     1.090909    0.001091         3         4.0   \n",
      "5  10    2   1.0          5     6.000000    0.060000         6         7.0   \n",
      "\n",
      "   exit_fees       pnl  return  direction  status  position_id  \n",
      "0      0.030  1.868182  1.7125          0       1            0  \n",
      "1      0.004  0.285818  2.6200          0       1            0  \n",
      "2      0.070  0.870000  0.1450          0       1            1  \n",
      "3      0.030  1.868182  1.7125          0       1            6  \n",
      "4      0.004  0.285818  2.6200          0       1            6  \n",
      "5      0.070  0.870000  0.1450          0       1            7  \n",
      "756 µs ± 11 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades.winning)\n",
    "print(trades['a'].winning.records)\n",
    "print(trades.winning['a'].records)\n",
    "print(trades.winning.records)\n",
    "\n",
    "%timeit big_trades.winning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Trades(**Config({\n",
      "    \"wrapper\": \"<vectorbt.base.array_wrapper.ArrayWrapper object at 0x7f9f78606d30> of shape (8, 4)\",\n",
      "    \"records_arr\": \"<numpy.ndarray object at 0x7fa007ca3a28> of shape (7,)\",\n",
      "    \"col_mapper\": null,\n",
      "    \"ts\": null,\n",
      "    \"close\": \"<pandas.core.frame.DataFrame object at 0x7f9f782a4390> of shape (8, 4)\"\n",
      "}))\n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   3    0   2.0          7          8.0        0.16         7         8.0   \n",
      "\n",
      "   exit_fees   pnl  return  direction  status  position_id  \n",
      "0        0.0 -0.16   -0.01          0       0            2  \n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   3    0   2.0          7          8.0        0.16         7         8.0   \n",
      "\n",
      "   exit_fees   pnl  return  direction  status  position_id  \n",
      "0        0.0 -0.16   -0.01          0       0            2  \n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   3    0   2.0          7     8.000000    0.160000         7         8.0   \n",
      "1   4    1   1.0          0     1.090909    0.010909         2         3.0   \n",
      "2   5    1   0.1          0     1.090909    0.001091         3         4.0   \n",
      "3   6    1   1.0          5     6.000000    0.060000         6         7.0   \n",
      "4   7    1   2.0          7     8.000000    0.160000         7         8.0   \n",
      "5  11    2   1.0          6     7.000000    0.070000         7         8.0   \n",
      "6  12    2   1.0          7     8.000000    0.080000         7         8.0   \n",
      "\n",
      "   exit_fees    pnl    return  direction  status  position_id  \n",
      "0      0.000 -0.160 -0.010000          0       0            2  \n",
      "1      0.030 -1.950 -1.787500          1       1            3  \n",
      "2      0.004 -0.296 -2.713333          1       1            3  \n",
      "3      0.070 -1.130 -0.188333          1       1            4  \n",
      "4      0.000 -0.160 -0.010000          1       0            5  \n",
      "5      0.080 -1.150 -0.164286          1       1            8  \n",
      "6      0.000 -0.080 -0.010000          0       0            9  \n",
      "751 µs ± 8.53 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades.losing)\n",
    "print(trades['a'].losing.records)\n",
    "print(trades.losing['a'].records)\n",
    "print(trades.losing.records)\n",
    "\n",
    "%timeit big_trades.losing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    1\n",
      "1    2\n",
      "2    3\n",
      "3    0\n",
      "Name: a, dtype: int64\n",
      "     a    b    c   d\n",
      "0  1.0  0.0  1.0 NaN\n",
      "1  2.0  0.0  2.0 NaN\n",
      "2  3.0  0.0  3.0 NaN\n",
      "3  0.0  0.0  0.0 NaN\n",
      "4  NaN  NaN  0.0 NaN\n",
      "565 µs ± 7.54 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades['a'].winning_streak.to_pd(ignore_index=True))\n",
    "print(trades.winning_streak.to_pd(ignore_index=True))\n",
    "\n",
    "%timeit big_trades.winning_streak"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    0\n",
      "1    0\n",
      "2    0\n",
      "3    1\n",
      "Name: a, dtype: int64\n",
      "     a    b    c   d\n",
      "0  0.0  1.0  0.0 NaN\n",
      "1  0.0  2.0  0.0 NaN\n",
      "2  0.0  3.0  0.0 NaN\n",
      "3  1.0  4.0  1.0 NaN\n",
      "4  NaN  NaN  2.0 NaN\n",
      "551 µs ± 5.51 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades['a'].losing_streak.to_pd(ignore_index=True))\n",
    "print(trades.losing_streak.to_pd(ignore_index=True))\n",
    "\n",
    "%timeit big_trades.losing_streak"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.75\n",
      "a    0.75\n",
      "b    0.00\n",
      "c    0.60\n",
      "d     NaN\n",
      "Name: win_rate, dtype: float64\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:530: RuntimeWarning:\n",
      "\n",
      "invalid value encountered in true_divide\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "951 µs ± 3.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "group\n",
      "first     0.375\n",
      "second    0.600\n",
      "Name: win_rate, dtype: float64\n",
      "5.47 ms ± 21.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades['a'].win_rate())\n",
    "print(trades.win_rate())\n",
    "%timeit big_trades.win_rate()\n",
    "\n",
    "print(trades.win_rate(group_by=group_by))\n",
    "%timeit big_trades.win_rate(group_by=big_group_by)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "18.9\n",
      "a    18.900000\n",
      "b     0.000000\n",
      "c     2.458537\n",
      "d          NaN\n",
      "Name: profit_factor, dtype: float64\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:544: RuntimeWarning:\n",
      "\n",
      "invalid value encountered in true_divide\n",
      "\n",
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:544: RuntimeWarning:\n",
      "\n",
      "divide by zero encountered in true_divide\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.65 ms ± 136 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "group\n",
      "first     0.818182\n",
      "second    2.458537\n",
      "Name: profit_factor, dtype: float64\n",
      "2.57 ms ± 65.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades['a'].profit_factor())\n",
    "print(trades.profit_factor())\n",
    "%timeit big_trades.profit_factor()\n",
    "\n",
    "print(trades_grouped.profit_factor())\n",
    "%timeit big_trades_grouped.profit_factor()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.716\n",
      "a    0.7160\n",
      "b   -0.8840\n",
      "c    0.3588\n",
      "d       NaN\n",
      "Name: expectancy, dtype: float64\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:530: RuntimeWarning:\n",
      "\n",
      "invalid value encountered in true_divide\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.55 ms ± 34.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "group\n",
      "first    -0.0840\n",
      "second    0.3588\n",
      "Name: expectancy, dtype: float64\n",
      "3.54 ms ± 37.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades['a'].expectancy())\n",
    "print(trades.expectancy())\n",
    "%timeit big_trades.expectancy()\n",
    "\n",
    "print(trades_grouped.expectancy())\n",
    "%timeit big_trades_grouped.expectancy()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.634155521947584\n",
      "a    1.634156\n",
      "b   -2.130073\n",
      "c    0.716604\n",
      "d         NaN\n",
      "Name: sqn, dtype: float64\n",
      "1.32 ms ± 11.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "group\n",
      "first    -0.204047\n",
      "second    0.716604\n",
      "Name: sqn, dtype: float64\n",
      "924 µs ± 9.78 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades['a'].sqn())\n",
    "print(trades.sqn())\n",
    "%timeit big_trades.sqn()\n",
    "\n",
    "print(trades_grouped.sqn())\n",
    "%timeit big_trades_grouped.sqn()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Trades(**Config({\n",
      "    \"wrapper\": \"<vectorbt.base.array_wrapper.ArrayWrapper object at 0x7f9f78606d30> of shape (8, 4)\",\n",
      "    \"records_arr\": \"<numpy.ndarray object at 0x7f9f68734be0> of shape (8,)\",\n",
      "    \"col_mapper\": null,\n",
      "    \"ts\": null,\n",
      "    \"close\": \"<pandas.core.frame.DataFrame object at 0x7f9f782a4390> of shape (8, 4)\"\n",
      "}))\n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1   1    0   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2   2    0   1.0          5     6.000000    0.060000         6         7.0   \n",
      "3   3    0   2.0          7     8.000000    0.160000         7         8.0   \n",
      "\n",
      "   exit_fees       pnl  return  direction  status  position_id  \n",
      "0      0.030  1.868182  1.7125          0       1            0  \n",
      "1      0.004  0.285818  2.6200          0       1            0  \n",
      "2      0.070  0.870000  0.1450          0       1            1  \n",
      "3      0.000 -0.160000 -0.0100          0       0            2  \n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1   1    0   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2   2    0   1.0          5     6.000000    0.060000         6         7.0   \n",
      "3   3    0   2.0          7     8.000000    0.160000         7         8.0   \n",
      "\n",
      "   exit_fees       pnl  return  direction  status  position_id  \n",
      "0      0.030  1.868182  1.7125          0       1            0  \n",
      "1      0.004  0.285818  2.6200          0       1            0  \n",
      "2      0.070  0.870000  0.1450          0       1            1  \n",
      "3      0.000 -0.160000 -0.0100          0       0            2  \n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1   1    0   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2   2    0   1.0          5     6.000000    0.060000         6         7.0   \n",
      "3   3    0   2.0          7     8.000000    0.160000         7         8.0   \n",
      "4   8    2   1.0          0     1.090909    0.010909         2         3.0   \n",
      "5   9    2   0.1          0     1.090909    0.001091         3         4.0   \n",
      "6  10    2   1.0          5     6.000000    0.060000         6         7.0   \n",
      "7  12    2   1.0          7     8.000000    0.080000         7         8.0   \n",
      "\n",
      "   exit_fees       pnl  return  direction  status  position_id  \n",
      "0      0.030  1.868182  1.7125          0       1            0  \n",
      "1      0.004  0.285818  2.6200          0       1            0  \n",
      "2      0.070  0.870000  0.1450          0       1            1  \n",
      "3      0.000 -0.160000 -0.0100          0       0            2  \n",
      "4      0.030  1.868182  1.7125          0       1            6  \n",
      "5      0.004  0.285818  2.6200          0       1            6  \n",
      "6      0.070  0.870000  0.1450          0       1            7  \n",
      "7      0.000 -0.080000 -0.0100          0       0            9  \n",
      "764 µs ± 12.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades.long)\n",
    "print(trades['a'].long.records)\n",
    "print(trades.long['a'].records)\n",
    "print(trades.long.records)\n",
    "\n",
    "%timeit big_trades.long"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Trades(**Config({\n",
      "    \"wrapper\": \"<vectorbt.base.array_wrapper.ArrayWrapper object at 0x7f9f78606d30> of shape (8, 4)\",\n",
      "    \"records_arr\": \"<numpy.ndarray object at 0x7f9f7a2d8608> of shape (5,)\",\n",
      "    \"col_mapper\": null,\n",
      "    \"ts\": null,\n",
      "    \"close\": \"<pandas.core.frame.DataFrame object at 0x7f9f782a4390> of shape (8, 4)\"\n",
      "}))\n",
      "Empty DataFrame\n",
      "Columns: [id, col, size, entry_idx, entry_price, entry_fees, exit_idx, exit_price, exit_fees, pnl, return, direction, status, position_id]\n",
      "Index: []\n",
      "Empty DataFrame\n",
      "Columns: [id, col, size, entry_idx, entry_price, entry_fees, exit_idx, exit_price, exit_fees, pnl, return, direction, status, position_id]\n",
      "Index: []\n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   4    1   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1   5    1   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2   6    1   1.0          5     6.000000    0.060000         6         7.0   \n",
      "3   7    1   2.0          7     8.000000    0.160000         7         8.0   \n",
      "4  11    2   1.0          6     7.000000    0.070000         7         8.0   \n",
      "\n",
      "   exit_fees    pnl    return  direction  status  position_id  \n",
      "0      0.030 -1.950 -1.787500          1       1            3  \n",
      "1      0.004 -0.296 -2.713333          1       1            3  \n",
      "2      0.070 -1.130 -0.188333          1       1            4  \n",
      "3      0.000 -0.160 -0.010000          1       0            5  \n",
      "4      0.080 -1.150 -0.164286          1       1            8  \n",
      "762 µs ± 9.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades.short)\n",
    "print(trades['a'].short.records)\n",
    "print(trades.short['a'].records)\n",
    "print(trades.short.records)\n",
    "\n",
    "%timeit big_trades.short"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Trades(**Config({\n",
      "    \"wrapper\": \"<vectorbt.base.array_wrapper.ArrayWrapper object at 0x7f9f78606d30> of shape (8, 4)\",\n",
      "    \"records_arr\": \"<numpy.ndarray object at 0x7f9f7cd48978> of shape (3,)\",\n",
      "    \"col_mapper\": null,\n",
      "    \"ts\": null,\n",
      "    \"close\": \"<pandas.core.frame.DataFrame object at 0x7f9f782a4390> of shape (8, 4)\"\n",
      "}))\n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   3    0   2.0          7          8.0        0.16         7         8.0   \n",
      "\n",
      "   exit_fees   pnl  return  direction  status  position_id  \n",
      "0        0.0 -0.16   -0.01          0       0            2  \n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   3    0   2.0          7          8.0        0.16         7         8.0   \n",
      "\n",
      "   exit_fees   pnl  return  direction  status  position_id  \n",
      "0        0.0 -0.16   -0.01          0       0            2  \n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   3    0   2.0          7          8.0        0.16         7         8.0   \n",
      "1   7    1   2.0          7          8.0        0.16         7         8.0   \n",
      "2  12    2   1.0          7          8.0        0.08         7         8.0   \n",
      "\n",
      "   exit_fees   pnl  return  direction  status  position_id  \n",
      "0        0.0 -0.16   -0.01          0       0            2  \n",
      "1        0.0 -0.16   -0.01          1       0            5  \n",
      "2        0.0 -0.08   -0.01          0       0            9  \n",
      "777 µs ± 10.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades.open)\n",
    "print(trades['a'].open.records)\n",
    "print(trades.open['a'].records)\n",
    "print(trades.open.records)\n",
    "\n",
    "%timeit big_trades.open"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Trades(**Config({\n",
      "    \"wrapper\": \"<vectorbt.base.array_wrapper.ArrayWrapper object at 0x7f9f78606d30> of shape (8, 4)\",\n",
      "    \"records_arr\": \"<numpy.ndarray object at 0x7f9f7a4e3608> of shape (10,)\",\n",
      "    \"col_mapper\": null,\n",
      "    \"ts\": null,\n",
      "    \"close\": \"<pandas.core.frame.DataFrame object at 0x7f9f782a4390> of shape (8, 4)\"\n",
      "}))\n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1   1    0   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2   2    0   1.0          5     6.000000    0.060000         6         7.0   \n",
      "\n",
      "   exit_fees       pnl  return  direction  status  position_id  \n",
      "0      0.030  1.868182  1.7125          0       1            0  \n",
      "1      0.004  0.285818  2.6200          0       1            0  \n",
      "2      0.070  0.870000  0.1450          0       1            1  \n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1   1    0   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2   2    0   1.0          5     6.000000    0.060000         6         7.0   \n",
      "\n",
      "   exit_fees       pnl  return  direction  status  position_id  \n",
      "0      0.030  1.868182  1.7125          0       1            0  \n",
      "1      0.004  0.285818  2.6200          0       1            0  \n",
      "2      0.070  0.870000  0.1450          0       1            1  \n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.0          0     1.090909    0.010909         2         3.0   \n",
      "1   1    0   0.1          0     1.090909    0.001091         3         4.0   \n",
      "2   2    0   1.0          5     6.000000    0.060000         6         7.0   \n",
      "3   4    1   1.0          0     1.090909    0.010909         2         3.0   \n",
      "4   5    1   0.1          0     1.090909    0.001091         3         4.0   \n",
      "5   6    1   1.0          5     6.000000    0.060000         6         7.0   \n",
      "6   8    2   1.0          0     1.090909    0.010909         2         3.0   \n",
      "7   9    2   0.1          0     1.090909    0.001091         3         4.0   \n",
      "8  10    2   1.0          5     6.000000    0.060000         6         7.0   \n",
      "9  11    2   1.0          6     7.000000    0.070000         7         8.0   \n",
      "\n",
      "   exit_fees       pnl    return  direction  status  position_id  \n",
      "0      0.030  1.868182  1.712500          0       1            0  \n",
      "1      0.004  0.285818  2.620000          0       1            0  \n",
      "2      0.070  0.870000  0.145000          0       1            1  \n",
      "3      0.030 -1.950000 -1.787500          1       1            3  \n",
      "4      0.004 -0.296000 -2.713333          1       1            3  \n",
      "5      0.070 -1.130000 -0.188333          1       1            4  \n",
      "6      0.030  1.868182  1.712500          0       1            6  \n",
      "7      0.004  0.285818  2.620000          0       1            6  \n",
      "8      0.070  0.870000  0.145000          0       1            7  \n",
      "9      0.080 -1.150000 -0.164286          1       1            8  \n",
      "759 µs ± 11.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades.closed)\n",
    "print(trades['a'].closed.records)\n",
    "print(trades.closed['a'].records)\n",
    "print(trades.closed.records)\n",
    "\n",
    "%timeit big_trades.closed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:544: RuntimeWarning:\n",
      "\n",
      "divide by zero encountered in true_divide\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Start                         2020-01-01 00:00:00\n",
      "End                           2020-01-08 00:00:00\n",
      "Period                            8 days 00:00:00\n",
      "First Trade Start             2020-01-01 00:00:00\n",
      "Last Trade End                2020-01-08 00:00:00\n",
      "Coverage                          5 days 00:00:00\n",
      "Overlap Coverage                  2 days 00:00:00\n",
      "Total Records                                   4\n",
      "Total Long Trades                               4\n",
      "Total Short Trades                              0\n",
      "Total Closed Trades                             3\n",
      "Total Open Trades                               1\n",
      "Open Trade PnL                              -0.16\n",
      "Win Rate [%]                                100.0\n",
      "Max Win Streak                                  3\n",
      "Max Loss Streak                                 0\n",
      "Best Trade [%]                              262.0\n",
      "Worst Trade [%]                              14.5\n",
      "Avg Winning Trade [%]                      149.25\n",
      "Avg Losing Trade [%]                          NaN\n",
      "Avg Winning Trade Duration        2 days 00:00:00\n",
      "Avg Losing Trade Duration                     NaT\n",
      "Profit Factor                                 inf\n",
      "Expectancy                                  1.008\n",
      "SQN                                      2.181955\n",
      "Name: a, dtype: object\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:530: RuntimeWarning:\n",
      "\n",
      "invalid value encountered in true_divide\n",
      "\n",
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:544: RuntimeWarning:\n",
      "\n",
      "invalid value encountered in true_divide\n",
      "\n",
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:530: RuntimeWarning:\n",
      "\n",
      "invalid value encountered in true_divide\n",
      "\n",
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:544: RuntimeWarning:\n",
      "\n",
      "invalid value encountered in true_divide\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "42.1 ms ± 2.02 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
      "Start                         2020-01-01 00:00:00\n",
      "End                           2020-01-08 00:00:00\n",
      "Period                            8 days 00:00:00\n",
      "First Trade Start             2020-01-01 00:00:00\n",
      "Last Trade End                2020-01-08 00:00:00\n",
      "Coverage                          5 days 00:00:00\n",
      "Overlap Coverage                  2 days 00:00:00\n",
      "Total Records                                   4\n",
      "Total Long Trades                               4\n",
      "Total Short Trades                              0\n",
      "Total Closed Trades                             3\n",
      "Total Open Trades                               1\n",
      "Open Trade PnL                              -0.16\n",
      "Win Rate [%]                                100.0\n",
      "Max Win Streak                                  3\n",
      "Max Loss Streak                                 0\n",
      "Best Trade [%]                              262.0\n",
      "Worst Trade [%]                              14.5\n",
      "Avg Winning Trade [%]                      149.25\n",
      "Avg Losing Trade [%]                          NaN\n",
      "Avg Winning Trade Duration        2 days 00:00:00\n",
      "Avg Losing Trade Duration                     NaT\n",
      "Profit Factor                                 inf\n",
      "Expectancy                                  1.008\n",
      "SQN                                      2.181955\n",
      "Name: a, dtype: object\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:530: RuntimeWarning:\n",
      "\n",
      "invalid value encountered in true_divide\n",
      "\n",
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:544: RuntimeWarning:\n",
      "\n",
      "divide by zero encountered in true_divide\n",
      "\n",
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:544: RuntimeWarning:\n",
      "\n",
      "invalid value encountered in true_divide\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "44.4 ms ± 1.17 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n",
      "Start                         2020-01-01 00:00:00\n",
      "End                           2020-01-08 00:00:00\n",
      "Period                            8 days 00:00:00\n",
      "First Trade Start             2020-01-01 00:00:00\n",
      "Last Trade End                2020-01-08 00:00:00\n",
      "Coverage                          5 days 08:00:00\n",
      "Overlap Coverage                  2 days 00:00:00\n",
      "Total Records                                3.25\n",
      "Total Long Trades                             2.0\n",
      "Total Short Trades                           1.25\n",
      "Total Closed Trades                           2.5\n",
      "Total Open Trades                            0.75\n",
      "Open Trade PnL                               -0.1\n",
      "Win Rate [%]                            58.333333\n",
      "Max Win Streak                                2.0\n",
      "Max Loss Streak                          1.333333\n",
      "Best Trade [%]                         168.388889\n",
      "Worst Trade [%]                        -91.087302\n",
      "Avg Winning Trade [%]                      149.25\n",
      "Avg Losing Trade [%]                   -86.367063\n",
      "Avg Winning Trade Duration        2 days 00:00:00\n",
      "Avg Losing Trade Duration         1 days 12:00:00\n",
      "Profit Factor                                 inf\n",
      "Expectancy                               0.117056\n",
      "SQN                                      0.189316\n",
      "Name: agg_func_mean, dtype: object\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:530: RuntimeWarning:\n",
      "\n",
      "invalid value encountered in true_divide\n",
      "\n",
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:544: RuntimeWarning:\n",
      "\n",
      "divide by zero encountered in true_divide\n",
      "\n",
      "/Users/olegpolakow/Documents/SourceTree/vectorbt/vectorbt/portfolio/trades.py:544: RuntimeWarning:\n",
      "\n",
      "invalid value encountered in true_divide\n",
      "\n",
      "/Users/olegpolakow/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:7: UserWarning:\n",
      "\n",
      "Object has multiple columns. Aggregating using <function mean at 0x7fa020856598>. Pass column to select a single column/group.\n",
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "44.9 ms ± 1.26 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(trades['a'].stats())\n",
    "%timeit big_trades[0].stats(silence_warnings=True)\n",
    "\n",
    "print(trades.stats(column='a'))\n",
    "%timeit big_trades.stats(column=0, silence_warnings=True)\n",
    "\n",
    "print(trades.stats())\n",
    "%timeit big_trades.stats(silence_warnings=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-b04e8a\"><g class=\"clips\"><clipPath id=\"clipb04e8axyplot\" class=\"plotclip\"><rect width=\"640\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clipb04e8ax\"><rect x=\"30\" y=\"0\" width=\"640\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clipb04e8ay\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clipb04e8axy\"><rect x=\"30\" y=\"46\" width=\"640\" height=\"261\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"30\" y=\"46\" width=\"640\" height=\"261\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"><path data-index=\"0\" fill-rule=\"evenodd\" d=\"M66.38,287.25H228.45V225.41H66.38Z\" clip-path=\"url(#clipb04e8axy)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 128, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"1\" fill-rule=\"evenodd\" d=\"M66.38,287.25H309.48V193.01H66.38Z\" clip-path=\"url(#clipb04e8axy)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 128, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"2\" fill-rule=\"evenodd\" d=\"M471.55,128.22H552.59V95.82H471.55Z\" clip-path=\"url(#clipb04e8axy)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 128, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"3\" fill-rule=\"evenodd\" d=\"M552.59,95.82H633.62V63.43H552.59Z\" clip-path=\"url(#clipb04e8axy)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(255, 0, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"4\" fill-rule=\"evenodd\" d=\"M633.62,63.43H633.62V63.43H633.62Z\" clip-path=\"url(#clipb04e8axy)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(255, 0, 0); fill-opacity: 1; stroke-width: 0px;\"/></g><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"><path class=\"xgrid crisp\" transform=\"translate(66.38,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(147.41,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(228.45,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(309.48,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(390.52,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(471.55,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(552.59,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(633.62,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,257.8)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,193.01)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,128.22)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,63.43)\" d=\"M30,0h640\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(30,46)\" clip-path=\"url(#clipb04e8axyplot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter trace5f8e9f21-fef6-4ae7-b997-cc3064d0ebe8\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M36.38,244.2L603.62,17.43\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(36.38,244.2)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(117.41,211.8)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(198.45,179.41)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(279.48,147.01)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(360.52,114.61)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(441.55,82.22)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(522.59,49.82)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(603.62,17.43)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace05faf4f9-3e59-4cd7-a174-36cbe3c2ce2d\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(36.38,241.25)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(36.38,241.25)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(441.55,82.22)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(522.59,49.82)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(603.62,17.43)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace67cb38fb-2596-4580-9fc7-2573e167d636\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(198.45,179.41)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(279.48,147.01)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(522.59,49.82)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace7478a608-37a5-480f-8cfb-3106df79649b\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(603.62,17.43)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter tracec942e3ad-534b-4753-91e8-88c1d6ff4916\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(603.62,17.43)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" transform=\"translate(66.38,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\"><tspan class=\"line\" dy=\"0em\" x=\"0\" y=\"320\">Jan 1</tspan><tspan class=\"line\" dy=\"1.3em\" x=\"0\" y=\"320\">2020</tspan></text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(147.41,0)\">Jan 2</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(228.45,0)\">Jan 3</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(309.48,0)\">Jan 4</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(390.52,0)\">Jan 5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(471.55,0)\">Jan 6</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(552.59,0)\">Jan 7</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(633.62,0)\">Jan 8</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" transform=\"translate(0,257.8)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">2</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,193.01)\">4</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,128.22)\">6</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"29\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,63.43)\">8</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-b04e8a\"><g class=\"clips\"/><clipPath id=\"legendb04e8a\"><rect width=\"458\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(212,11.779999999999994)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"458\" height=\"29\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legendb04e8a)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Close</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"74.859375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(77.359375,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Entry</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"74.640625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(154.5,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Exit - Profit</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"110.984375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(267.984375,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Exit - Loss</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"105.578125\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(376.0625,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Active</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"79.234375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trades['c'].plot().show_svg()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"700\" height=\"350\" style=\"\" viewBox=\"0 0 700 350\"><rect x=\"0\" y=\"0\" width=\"700\" height=\"350\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-843819\"><g class=\"clips\"><clipPath id=\"clip843819xyplot\" class=\"plotclip\"><rect width=\"602\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clip843819x\"><rect x=\"68\" y=\"0\" width=\"602\" height=\"350\"/></clipPath><clipPath class=\"axesclip\" id=\"clip843819y\"><rect x=\"0\" y=\"46\" width=\"700\" height=\"261\"/></clipPath><clipPath class=\"axesclip\" id=\"clip843819xy\"><rect x=\"68\" y=\"46\" width=\"602\" height=\"261\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"68\" y=\"46\" width=\"602\" height=\"261\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"><path class=\"xgrid crisp\" transform=\"translate(105.33,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(211.32,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(317.3,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(423.29,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(529.28,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(635.27,0)\" d=\"M0,46v261\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,236.47)\" d=\"M68,0h602\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,196.69)\" d=\"M68,0h602\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,156.91)\" d=\"M68,0h602\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,117.13)\" d=\"M68,0h602\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,77.35)\" d=\"M68,0h602\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"><path class=\"yzl zl crisp\" transform=\"translate(0,276.25)\" d=\"M68,0h602\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 2px;\"/></g><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(68,46)\" clip-path=\"url(#clip843819xyplot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter traced6244cc8-81aa-4320-8773-35fd6a0ac042\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(37.33,94)\" d=\"M5.78,0A5.78,5.78 0 1,1 0,-5.78A5.78,5.78 0 0,1 5.78,0Z\" style=\"opacity: 0.847845; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(143.32,21.8)\" d=\"M7,0A7,7 0 1,1 0,-7A7,7 0 0,1 7,0Z\" style=\"opacity: 0.9; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(461.28,218.71)\" d=\"M3.68,0A3.68,3.68 0 1,1 0,-3.68A3.68,3.68 0 0,1 3.68,0Z\" style=\"opacity: 0.757759; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace6ecb2825-5f01-4935-b04e-910570ad949c\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(567.27,243.32)\" d=\"M3.71,0A3.71,3.71 0 1,1 0,-3.71A3.71,3.71 0 0,1 3.71,0Z\" style=\"opacity: 0.758867; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace4b7ce886-4d2e-4bd7-bd61-6024a91fd32f\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(567.27,231.04)\" d=\"M3.5,0A3.5,3.5 0 1,1 0,-3.5A3.5,3.5 0 0,1 3.5,0Z\" style=\"opacity: 0.75; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" transform=\"translate(105.33,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\"><tspan class=\"line\" dy=\"0em\" x=\"0\" y=\"320\">Jan 3</tspan><tspan class=\"line\" dy=\"1.3em\" x=\"0\" y=\"320\">2020</tspan></text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(211.32,0)\">Jan 4</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(317.3,0)\">Jan 5</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(423.29,0)\">Jan 6</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(529.28,0)\">Jan 7</text></g><g class=\"xtick\"><text text-anchor=\"middle\" x=\"0\" y=\"320\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(635.27,0)\">Jan 8</text></g></g><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"67\" y=\"4.199999999999999\" transform=\"translate(0,276.25)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">0.00%</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"67\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,236.47)\">50.00%</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"67\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,196.69)\">100.00%</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"67\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,156.91)\">150.00%</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"67\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,117.13)\">200.00%</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"67\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,77.35)\">250.00%</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-843819\"><g class=\"clips\"/><clipPath id=\"legend843819\"><rect width=\"333\" height=\"29\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"><path data-index=\"0\" fill-rule=\"evenodd\" d=\"M68,276.25L670,276.25\" clip-path=\"url(#clip843819y)\" style=\"opacity: 1; stroke: rgb(128, 128, 128); stroke-opacity: 1; fill: rgb(0, 0, 0); fill-opacity: 0; stroke-dasharray: 9px, 9px; stroke-width: 2px;\"/></g></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(337,11.779999999999994)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"333\" height=\"29\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legend843819)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Closed - Profit</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M5.49,0A5.49,5.49 0 1,1 0,-5.49A5.49,5.49 0 0,1 5.49,0Z\" style=\"opacity: 0.835201; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"128.109375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(130.609375,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Closed - Loss</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.71,0A3.71,3.71 0 1,1 0,-3.71A3.71,3.71 0 0,1 3.71,0Z\" style=\"opacity: 0.758867; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"122.6875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(255.796875,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Open</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.5,0A3.5,3.5 0 1,1 0,-3.5A3.5,3.5 0 0,1 3.5,0Z\" style=\"opacity: 0.75; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"74.171875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-ytitle\"/></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trades['c'].plot_pnl().show_svg()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg class=\"main-svg\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"750\" height=\"670\" style=\"\" viewBox=\"0 0 750 670\"><rect x=\"0\" y=\"0\" width=\"750\" height=\"670\" style=\"fill: rgb(255, 255, 255); fill-opacity: 1;\"/><defs id=\"defs-6012c9\"><g class=\"clips\"><clipPath id=\"clip6012c9xyplot\" class=\"plotclip\"><rect width=\"627\" height=\"240.24626865671644\"/></clipPath><clipPath id=\"clip6012c9x2y2plot\" class=\"plotclip\"><rect width=\"627\" height=\"240.24626865671644\"/></clipPath><clipPath class=\"axesclip\" id=\"clip6012c9x\"><rect x=\"93\" y=\"0\" width=\"627\" height=\"670\"/></clipPath><clipPath class=\"axesclip\" id=\"clip6012c9y\"><rect x=\"0\" y=\"91\" width=\"750\" height=\"240.24626865671644\"/></clipPath><clipPath class=\"axesclip\" id=\"clip6012c9xy\"><rect x=\"93\" y=\"91\" width=\"627\" height=\"240.24626865671644\"/></clipPath><clipPath class=\"axesclip\" id=\"clip6012c9y2\"><rect x=\"0\" y=\"361.75373134328356\" width=\"750\" height=\"240.24626865671644\"/></clipPath><clipPath class=\"axesclip\" id=\"clip6012c9xy2\"><rect x=\"93\" y=\"361.75373134328356\" width=\"627\" height=\"240.24626865671644\"/></clipPath><clipPath class=\"axesclip\" id=\"clip6012c9x2\"><rect x=\"93\" y=\"0\" width=\"627\" height=\"670\"/></clipPath><clipPath class=\"axesclip\" id=\"clip6012c9x2y\"><rect x=\"93\" y=\"91\" width=\"627\" height=\"240.24626865671644\"/></clipPath><clipPath class=\"axesclip\" id=\"clip6012c9x2y2\"><rect x=\"93\" y=\"361.75373134328356\" width=\"627\" height=\"240.24626865671644\"/></clipPath></g><g class=\"gradients\"/><g class=\"patterns\"/></defs><g class=\"bglayer\"><rect class=\"bg\" x=\"93\" y=\"91\" width=\"627\" height=\"240.24626865671644\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/><rect class=\"bg\" x=\"93\" y=\"361.75373134328356\" width=\"627\" height=\"240.24626865671644\" style=\"fill: rgb(229, 236, 246); fill-opacity: 1; stroke-width: 0;\"/></g><g class=\"layer-below\"><g class=\"imagelayer\"/><g class=\"shapelayer\"/></g><g class=\"cartesianlayer\"><g class=\"subplot xy\"><g class=\"layer-subplot\"><g class=\"shapelayer\"><path data-index=\"0\" fill-rule=\"evenodd\" d=\"M128.72,312.78H287.45V256.03H128.72Z\" clip-path=\"url(#clip6012c9xy)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 128, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"1\" fill-rule=\"evenodd\" d=\"M128.72,312.78H366.82V226.3H128.72Z\" clip-path=\"url(#clip6012c9xy)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 128, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"2\" fill-rule=\"evenodd\" d=\"M525.55,166.84H604.9100000000001V137.12H525.55Z\" clip-path=\"url(#clip6012c9xy)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 128, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"3\" fill-rule=\"evenodd\" d=\"M604.9100000000001,137.12H684.28V107.39H604.9100000000001Z\" clip-path=\"url(#clip6012c9xy)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(255, 0, 0); fill-opacity: 1; stroke-width: 0px;\"/><path data-index=\"4\" fill-rule=\"evenodd\" d=\"M684.28,107.39H684.28V107.39H684.28Z\" clip-path=\"url(#clip6012c9xy)\" style=\"opacity: 0.2; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(255, 0, 0); fill-opacity: 1; stroke-width: 0px;\"/></g><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x\"><path class=\"xgrid crisp\" transform=\"translate(128.72,0)\" d=\"M0,91v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(208.09,0)\" d=\"M0,91v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(287.45,0)\" d=\"M0,91v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(366.82,0)\" d=\"M0,91v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(446.18,0)\" d=\"M0,91v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(525.55,0)\" d=\"M0,91v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(604.9100000000001,0)\" d=\"M0,91v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"xgrid crisp\" transform=\"translate(684.28,0)\" d=\"M0,91v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y\"><path class=\"ygrid crisp\" transform=\"translate(0,285.76)\" d=\"M93,0h627\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,226.3)\" d=\"M93,0h627\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,166.84)\" d=\"M93,0h627\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"ygrid crisp\" transform=\"translate(0,107.39)\" d=\"M93,0h627\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"/><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(93,91)\" clip-path=\"url(#clip6012c9xyplot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter trace699d2358-d7b5-44ea-a626-63718c5847e6\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"><path class=\"js-line\" d=\"M35.72,224.48L591.28,16.39\" style=\"vector-effect: non-scaling-stroke; fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px; opacity: 1;\"/></g><g class=\"points\"><path class=\"point\" transform=\"translate(35.72,224.48)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(115.09,194.76)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(194.45,165.03)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(273.82,135.3)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(353.18,105.57)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(432.55,75.84)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(511.91,46.12)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/><path class=\"point\" transform=\"translate(591.28,16.39)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter tracebd871723-b459-4f06-ae44-70afd442ba5f\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(35.72,221.78)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(35.72,221.78)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(432.55,75.84)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(511.91,46.12)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(591.28,16.39)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter tracecee19268-8320-4089-812c-42daa2974f35\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(194.45,165.03)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(273.82,135.3)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(511.91,46.12)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace2f951a78-c6f5-437b-9d9c-3d2d1b8e6279\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(591.28,16.39)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace01904468-b54f-4cbc-b495-450b9db856ff\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(591.28,16.39)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"/><g class=\"yaxislayer-above\"><g class=\"ytick\"><text text-anchor=\"end\" x=\"92\" y=\"4.199999999999999\" transform=\"translate(0,285.76)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">2</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"92\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,226.3)\">4</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"92\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,166.84)\">6</text></g><g class=\"ytick\"><text text-anchor=\"end\" x=\"92\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,107.39)\">8</text></g></g><g class=\"overaxes-above\"/></g><g class=\"subplot x2y2\"><g class=\"layer-subplot\"><g class=\"shapelayer\"/><g class=\"imagelayer\"/></g><g class=\"gridlayer\"><g class=\"x2\"><path class=\"x2grid crisp\" transform=\"translate(128.72,0)\" d=\"M0,361.75373134328356v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"x2grid crisp\" transform=\"translate(208.09,0)\" d=\"M0,361.75373134328356v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"x2grid crisp\" transform=\"translate(287.45,0)\" d=\"M0,361.75373134328356v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"x2grid crisp\" transform=\"translate(366.82,0)\" d=\"M0,361.75373134328356v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"x2grid crisp\" transform=\"translate(446.18,0)\" d=\"M0,361.75373134328356v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"x2grid crisp\" transform=\"translate(525.55,0)\" d=\"M0,361.75373134328356v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"x2grid crisp\" transform=\"translate(604.9100000000001,0)\" d=\"M0,361.75373134328356v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"x2grid crisp\" transform=\"translate(684.28,0)\" d=\"M0,361.75373134328356v240.24626865671644\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g><g class=\"y2\"><path class=\"y2grid crisp\" transform=\"translate(0,536.9637313432836)\" d=\"M93,0h627\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"y2grid crisp\" transform=\"translate(0,500.53373134328353)\" d=\"M93,0h627\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"y2grid crisp\" transform=\"translate(0,464.1137313432836)\" d=\"M93,0h627\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"y2grid crisp\" transform=\"translate(0,427.68373134328357)\" d=\"M93,0h627\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/><path class=\"y2grid crisp\" transform=\"translate(0,391.25373134328356)\" d=\"M93,0h627\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 1px;\"/></g></g><g class=\"zerolinelayer\"><path class=\"y2zl zl crisp\" transform=\"translate(0,573.3837313432836)\" d=\"M93,0h627\" style=\"stroke: rgb(255, 255, 255); stroke-opacity: 1; stroke-width: 2px;\"/></g><path class=\"xlines-below\"/><path class=\"ylines-below\"/><g class=\"overlines-below\"/><g class=\"xaxislayer-below\"/><g class=\"yaxislayer-below\"/><g class=\"overaxes-below\"/><g class=\"plot\" transform=\"translate(93,361.75373134328356)\" clip-path=\"url(#clip6012c9x2y2plot)\"><g class=\"scatterlayer mlayer\"><g class=\"trace scatter trace5a16bb18-8fcd-4b44-8ff4-d41c04cc7fdc\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(194.45,86.87)\" d=\"M5.78,0A5.78,5.78 0 1,1 0,-5.78A5.78,5.78 0 0,1 5.78,0Z\" style=\"opacity: 0.847845; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(273.82,20.76)\" d=\"M7,0A7,7 0 1,1 0,-7A7,7 0 0,1 7,0Z\" style=\"opacity: 0.9; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/><path class=\"point plotly-customdata\" transform=\"translate(511.91,201.07)\" d=\"M3.68,0A3.68,3.68 0 1,1 0,-3.68A3.68,3.68 0 0,1 3.68,0Z\" style=\"opacity: 0.757759; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace210702cc-a6ea-4e81-b7b7-eac8fdd214c4\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(591.28,223.6)\" d=\"M3.71,0A3.71,3.71 0 1,1 0,-3.71A3.71,3.71 0 0,1 3.71,0Z\" style=\"opacity: 0.758867; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g><g class=\"text\"/></g><g class=\"trace scatter trace04599449-b68a-4b02-aebd-402a5d2c236c\" style=\"stroke-miterlimit: 2; opacity: 1;\"><g class=\"fills\"/><g class=\"errorbars\"/><g class=\"lines\"/><g class=\"points\"><path class=\"point plotly-customdata\" transform=\"translate(591.28,212.36)\" d=\"M3.5,0A3.5,3.5 0 1,1 0,-3.5A3.5,3.5 0 0,1 3.5,0Z\" style=\"opacity: 0.75; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g><g class=\"text\"/></g></g></g><g class=\"overplot\"/><path class=\"xlines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><path class=\"ylines-above crisp\" d=\"M0,0\" style=\"fill: none;\"/><g class=\"overlines-above\"/><g class=\"xaxislayer-above\"><g class=\"x2tick\"><text text-anchor=\"middle\" x=\"0\" y=\"615\" transform=\"translate(128.72,0)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\"><tspan class=\"line\" dy=\"0em\" x=\"0\" y=\"615\">Jan 1</tspan><tspan class=\"line\" dy=\"1.3em\" x=\"0\" y=\"615\">2020</tspan></text></g><g class=\"x2tick\"><text text-anchor=\"middle\" x=\"0\" y=\"615\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(208.09,0)\">Jan 2</text></g><g class=\"x2tick\"><text text-anchor=\"middle\" x=\"0\" y=\"615\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(287.45,0)\">Jan 3</text></g><g class=\"x2tick\"><text text-anchor=\"middle\" x=\"0\" y=\"615\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(366.82,0)\">Jan 4</text></g><g class=\"x2tick\"><text text-anchor=\"middle\" x=\"0\" y=\"615\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(446.18,0)\">Jan 5</text></g><g class=\"x2tick\"><text text-anchor=\"middle\" x=\"0\" y=\"615\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(525.55,0)\">Jan 6</text></g><g class=\"x2tick\"><text text-anchor=\"middle\" x=\"0\" y=\"615\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(604.9100000000001,0)\">Jan 7</text></g><g class=\"x2tick\"><text text-anchor=\"middle\" x=\"0\" y=\"615\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(684.28,0)\">Jan 8</text></g></g><g class=\"yaxislayer-above\"><g class=\"y2tick\"><text text-anchor=\"end\" x=\"92\" y=\"4.199999999999999\" transform=\"translate(0,573.3837313432836)\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\">0.00%</text></g><g class=\"y2tick\"><text text-anchor=\"end\" x=\"92\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,536.9637313432836)\">50.00%</text></g><g class=\"y2tick\"><text text-anchor=\"end\" x=\"92\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,500.53373134328353)\">100.00%</text></g><g class=\"y2tick\"><text text-anchor=\"end\" x=\"92\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,464.1137313432836)\">150.00%</text></g><g class=\"y2tick\"><text text-anchor=\"end\" x=\"92\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,427.68373134328357)\">200.00%</text></g><g class=\"y2tick\"><text text-anchor=\"end\" x=\"92\" y=\"4.199999999999999\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre; opacity: 1;\" transform=\"translate(0,391.25373134328356)\">250.00%</text></g></g><g class=\"overaxes-above\"/></g></g><g class=\"polarlayer\"/><g class=\"ternarylayer\"/><g class=\"geolayer\"/><g class=\"funnelarealayer\"/><g class=\"pielayer\"/><g class=\"iciclelayer\"/><g class=\"treemaplayer\"/><g class=\"sunburstlayer\"/><g class=\"glimages\"/><defs id=\"topdefs-6012c9\"><g class=\"clips\"/><clipPath id=\"legend6012c9\"><rect width=\"500\" height=\"48\" x=\"0\" y=\"0\"/></clipPath></defs><g class=\"layer-above\"><g class=\"imagelayer\"/><g class=\"shapelayer\"><path data-index=\"5\" fill-rule=\"evenodd\" d=\"M93,573.3837313432836L720,573.3837313432836\" clip-path=\"url(#clip6012c9y2)\" style=\"opacity: 1; stroke: rgb(128, 128, 128); stroke-opacity: 1; fill: rgb(0, 0, 0); fill-opacity: 0; stroke-dasharray: 9px, 9px; stroke-width: 2px;\"/></g></g><g class=\"infolayer\"><g class=\"legend\" pointer-events=\"all\" transform=\"translate(220,12.492537313432862)\"><rect class=\"bg\" shape-rendering=\"crispEdges\" width=\"500\" height=\"48\" x=\"0\" y=\"0\" style=\"stroke: rgb(68, 68, 68); stroke-opacity: 1; fill: rgb(255, 255, 255); fill-opacity: 1; stroke-width: 0px;\"/><g class=\"scrollbox\" transform=\"\" clip-path=\"url(#legend6012c9)\"><g class=\"groups\"><g class=\"traces\" transform=\"translate(0,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Close</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"><path class=\"js-line\" d=\"M5,0h30\" style=\"fill: none; stroke: rgb(31, 119, 180); stroke-opacity: 1; stroke-width: 2px;\"/></g><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3,0A3,3 0 1,1 0,-3A3,3 0 0,1 3,0Z\" style=\"opacity: 1; stroke-width: 0px; fill: rgb(31, 119, 180); fill-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"74.859375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(130.609375,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Entry</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(66, 133, 244); fill-opacity: 1; stroke: rgb(11, 84, 205); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"74.640625\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(261.21875,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Exit - Profit</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"110.984375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(391.828125,14.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Exit - Loss</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"105.578125\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(0,33.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Active</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.5,3.5H-3.5V-3.5H3.5Z\" style=\"opacity: 1; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"79.234375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(130.609375,33.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Closed - Profit</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M5.49,0A5.49,5.49 0 1,1 0,-5.49A5.49,5.49 0 0,1 5.49,0Z\" style=\"opacity: 0.835201; stroke-width: 1px; fill: rgb(55, 177, 63); fill-opacity: 1; stroke: rgb(38, 123, 44); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"128.109375\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(261.21875,33.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Closed - Loss</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.71,0A3.71,3.71 0 1,1 0,-3.71A3.71,3.71 0 0,1 3.71,0Z\" style=\"opacity: 0.758867; stroke-width: 1px; fill: rgb(234, 67, 53); fill-opacity: 1; stroke: rgb(181, 31, 18); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"122.6875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g><g class=\"traces\" transform=\"translate(391.828125,33.5)\" style=\"opacity: 1;\"><text class=\"legendtext\" text-anchor=\"start\" x=\"40\" y=\"4.680000000000001\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 12px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Open</text><g class=\"layers\" style=\"opacity: 1;\"><g class=\"legendfill\"/><g class=\"legendlines\"/><g class=\"legendsymbols\"><g class=\"legendpoints\"><path class=\"scatterpts\" transform=\"translate(20,0)\" d=\"M3.5,0A3.5,3.5 0 1,1 0,-3.5A3.5,3.5 0 0,1 3.5,0Z\" style=\"opacity: 0.75; stroke-width: 1px; fill: rgb(255, 170, 0); fill-opacity: 1; stroke: rgb(178, 118, 0); stroke-opacity: 1;\"/></g></g></g><rect class=\"legendtoggle\" x=\"0\" y=\"-9.5\" width=\"74.171875\" height=\"19\" style=\"fill: rgb(0, 0, 0); fill-opacity: 0;\"/></g></g></g><rect class=\"scrollbar\" rx=\"20\" ry=\"3\" width=\"0\" height=\"0\" x=\"0\" y=\"0\" style=\"fill: rgb(128, 139, 164); fill-opacity: 1;\"/></g><g class=\"g-gtitle\"/><g class=\"g-xtitle\"/><g class=\"g-x2title\"><text class=\"x2title\" x=\"406.5\" y=\"657.909375\" text-anchor=\"middle\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 14px; fill: rgb(42, 63, 95); opacity: 1; font-weight: normal; white-space: pre;\">Index</text></g><g class=\"g-ytitle\"><text class=\"ytitle\" transform=\"rotate(-90,59.559375,211.12313432835822)\" x=\"59.559375\" y=\"211.12313432835822\" text-anchor=\"middle\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 14px; fill: rgb(42, 63, 95); opacity: 1; font-weight: normal; white-space: pre;\">Price</text></g><g class=\"g-y2title\" transform=\"translate(2.2392578125,0)\"><text class=\"y2title\" transform=\"rotate(-90,11.762500000000003,481.8768656716418)\" x=\"11.762500000000003\" y=\"481.8768656716418\" text-anchor=\"middle\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 14px; fill: rgb(42, 63, 95); opacity: 1; font-weight: normal; white-space: pre;\">Trade PnL</text></g><g class=\"annotation\" data-index=\"0\" style=\"opacity: 1;\"><g class=\"annotation-text-g\" transform=\"rotate(0,406.5,79)\"><g class=\"cursor-pointer\" transform=\"translate(378,67)\"><rect class=\"bg\" x=\"0.5\" y=\"0.5\" width=\"57\" height=\"23\" style=\"stroke-width: 1px; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 0, 0); fill-opacity: 0;\"/><text class=\"annotation-text\" text-anchor=\"middle\" x=\"29.078125\" y=\"18\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 16px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Trades</text></g></g></g><g class=\"annotation\" data-index=\"1\" style=\"opacity: 1;\"><g class=\"annotation-text-g\" transform=\"rotate(0,406.5,349.75373134328356)\"><g class=\"cursor-pointer\" transform=\"translate(365,338)\"><rect class=\"bg\" x=\"0.5\" y=\"0.5\" width=\"83\" height=\"23\" style=\"stroke-width: 1px; stroke: rgb(0, 0, 0); stroke-opacity: 0; fill: rgb(0, 0, 0); fill-opacity: 0;\"/><text class=\"annotation-text\" text-anchor=\"middle\" x=\"42.0625\" y=\"18\" style=\"font-family: 'Open Sans', verdana, arial, sans-serif; font-size: 16px; fill: rgb(42, 63, 95); fill-opacity: 1; white-space: pre;\">Trade PnL</text></g></g></g></g></svg>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "trades.plots(column='c').show_svg()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Positions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10,)\n"
     ]
    }
   ],
   "source": [
    "positions = vbt.Positions.from_trades(trades)\n",
    "positions_grouped = vbt.Positions.from_trades(trades_grouped)\n",
    "print(positions.values.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1000,)\n"
     ]
    }
   ],
   "source": [
    "big_positions = vbt.Positions.from_trades(big_trades)\n",
    "big_positions_grouped = vbt.Positions.from_trades(big_trades_grouped)\n",
    "print(big_positions.values.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "724 µs ± 12.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n"
     ]
    }
   ],
   "source": [
    "%timeit vbt.Positions.from_trades(big_trades)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.1          0     1.090909       0.012         3    3.090909   \n",
      "1   1    0   1.0          5     6.000000       0.060         6    7.000000   \n",
      "2   2    0   2.0          7     8.000000       0.160         7    8.000000   \n",
      "3   3    1   1.1          0     1.090909       0.012         3    3.090909   \n",
      "4   4    1   1.0          5     6.000000       0.060         6    7.000000   \n",
      "5   5    1   2.0          7     8.000000       0.160         7    8.000000   \n",
      "6   6    2   1.1          0     1.090909       0.012         3    3.090909   \n",
      "7   7    2   1.0          5     6.000000       0.060         6    7.000000   \n",
      "8   8    2   1.0          6     7.000000       0.070         7    8.000000   \n",
      "9   9    2   1.0          7     8.000000       0.080         7    8.000000   \n",
      "\n",
      "   exit_fees    pnl    return  direction  status  \n",
      "0      0.034  2.154  1.795000          0       1  \n",
      "1      0.070  0.870  0.145000          0       1  \n",
      "2      0.000 -0.160 -0.010000          0       0  \n",
      "3      0.034 -2.246 -1.871667          1       1  \n",
      "4      0.070 -1.130 -0.188333          1       1  \n",
      "5      0.000 -0.160 -0.010000          1       0  \n",
      "6      0.034  2.154  1.795000          0       1  \n",
      "7      0.070  0.870  0.145000          0       1  \n",
      "8      0.080 -1.150 -0.164286          1       1  \n",
      "9      0.000 -0.080 -0.010000          0       0  \n",
      "            a  b  c  d\n",
      "2020-01-01  1  1  1  1\n",
      "2020-01-02  2  2  2  2\n",
      "2020-01-03  3  3  3  3\n",
      "2020-01-04  4  4  4  4\n",
      "2020-01-05  5  5  5  5\n",
      "2020-01-06  6  6  6  6\n",
      "2020-01-07  7  7  7  7\n",
      "2020-01-08  8  8  8  8\n",
      "   id  col  size  entry_idx  entry_price  entry_fees  exit_idx  exit_price  \\\n",
      "0   0    0   1.1          0     1.090909       0.012         3    3.090909   \n",
      "1   1    0   1.0          5     6.000000       0.060         6    7.000000   \n",
      "2   2    0   2.0          7     8.000000       0.160         7    8.000000   \n",
      "\n",
      "   exit_fees    pnl  return  direction  status  \n",
      "0      0.034  2.154   1.795          0       1  \n",
      "1      0.070  0.870   0.145          0       1  \n",
      "2      0.000 -0.160  -0.010          0       0  \n",
      "2020-01-01    1\n",
      "2020-01-02    2\n",
      "2020-01-03    3\n",
      "2020-01-04    4\n",
      "2020-01-05    5\n",
      "2020-01-06    6\n",
      "2020-01-07    7\n",
      "2020-01-08    8\n",
      "Name: a, dtype: int64\n",
      "1.4 ms ± 43.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n",
      "3.06 ms ± 757 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "2.52 ms ± 53.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "3.22 ms ± 89.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    }
   ],
   "source": [
    "print(positions.records)\n",
    "print(positions.close)\n",
    "\n",
    "print(positions['a'].records)\n",
    "print(positions['a'].close)\n",
    "\n",
    "%timeit big_positions.iloc[0]\n",
    "%timeit big_positions.iloc[:]\n",
    "\n",
    "%timeit big_positions_grouped.iloc[0]\n",
    "%timeit big_positions_grouped.iloc[:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {
     "01f2862665d847b1bb454f087835c35c": {
      "buffers": [
       {
        "data": "AAAAAAAAJEAAAAAAAAAmQAAAAAAAAChA",
        "encoding": "base64",
        "path": [
         "_data",
         0,
         "x",
         "value"
        ]
       }
      ],
      "model_module": "plotlywidget",
      "model_module_version": "^4.12.0",
      "model_name": "FigureModel",
      "state": {
       "_config": {
        "plotlyServerURL": "https://plot.ly"
       },
       "_data": [
        {
         "name": "(0, 'a')",
         "opacity": 1,
         "showlegend": true,
         "type": "histogram",
         "uid": "d6ad8d12-ddd8-4fb4-aff9-ddb84ce5205f",
         "x": {
          "dtype": "float64",
          "shape": [
           3
          ],
          "value": {}
         }
        }
       ],
       "_js2py_layoutDelta": {},
       "_js2py_pointsCallback": {},
       "_js2py_relayout": {},
       "_js2py_restyle": {},
       "_js2py_traceDeltas": {},
       "_js2py_update": {},
       "_last_layout_edit_id": 4,
       "_last_trace_edit_id": 4,
       "_layout": {
        "barmode": "overlay",
        "height": 350,
        "legend": {
         "orientation": "h",
         "traceorder": "normal",
         "x": 1,
         "xanchor": "right",
         "y": 1.02,
         "yanchor": "bottom"
        },
        "margin": {
         "b": 30,
         "l": 30,
         "r": 30,
         "t": 30
        },
        "template": {
         "data": {
          "bar": [
           {
            "error_x": {
             "color": "#2a3f5f"
            },
            "error_y": {
             "color": "#2a3f5f"
            },
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "bar"
           }
          ],
          "barpolar": [
           {
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "barpolar"
           }
          ],
          "carpet": [
           {
            "aaxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "baxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "type": "carpet"
           }
          ],
          "choropleth": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "choropleth"
           }
          ],
          "contour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "contour"
           }
          ],
          "contourcarpet": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "contourcarpet"
           }
          ],
          "heatmap": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmap"
           }
          ],
          "heatmapgl": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmapgl"
           }
          ],
          "histogram": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "histogram"
           }
          ],
          "histogram2d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2d"
           }
          ],
          "histogram2dcontour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2dcontour"
           }
          ],
          "mesh3d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "mesh3d"
           }
          ],
          "parcoords": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "parcoords"
           }
          ],
          "pie": [
           {
            "automargin": true,
            "type": "pie"
           }
          ],
          "scatter": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter"
           }
          ],
          "scatter3d": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter3d"
           }
          ],
          "scattercarpet": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattercarpet"
           }
          ],
          "scattergeo": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergeo"
           }
          ],
          "scattergl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergl"
           }
          ],
          "scattermapbox": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattermapbox"
           }
          ],
          "scatterpolar": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolar"
           }
          ],
          "scatterpolargl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolargl"
           }
          ],
          "scatterternary": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterternary"
           }
          ],
          "surface": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "surface"
           }
          ],
          "table": [
           {
            "cells": {
             "fill": {
              "color": "#EBF0F8"
             },
             "line": {
              "color": "white"
             }
            },
            "header": {
             "fill": {
              "color": "#C8D4E3"
             },
             "line": {
              "color": "white"
             }
            },
            "type": "table"
           }
          ]
         },
         "layout": {
          "annotationdefaults": {
           "arrowcolor": "#2a3f5f",
           "arrowhead": 0,
           "arrowwidth": 1
          },
          "coloraxis": {
           "colorbar": {
            "outlinewidth": 0,
            "ticks": ""
           }
          },
          "colorscale": {
           "diverging": [
            [
             0,
             "#8e0152"
            ],
            [
             0.1,
             "#c51b7d"
            ],
            [
             0.2,
             "#de77ae"
            ],
            [
             0.3,
             "#f1b6da"
            ],
            [
             0.4,
             "#fde0ef"
            ],
            [
             0.5,
             "#f7f7f7"
            ],
            [
             0.6,
             "#e6f5d0"
            ],
            [
             0.7,
             "#b8e186"
            ],
            [
             0.8,
             "#7fbc41"
            ],
            [
             0.9,
             "#4d9221"
            ],
            [
             1,
             "#276419"
            ]
           ],
           "sequential": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ],
           "sequentialminus": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ]
          },
          "colorway": [
           "#1f77b4",
           "#ff7f0e",
           "#2ca02c",
           "#dc3912",
           "#9467bd",
           "#8c564b",
           "#e377c2",
           "#7f7f7f",
           "#bcbd22",
           "#17becf"
          ],
          "font": {
           "color": "#2a3f5f"
          },
          "geo": {
           "bgcolor": "white",
           "lakecolor": "white",
           "landcolor": "#E5ECF6",
           "showlakes": true,
           "showland": true,
           "subunitcolor": "white"
          },
          "hoverlabel": {
           "align": "left"
          },
          "hovermode": "closest",
          "mapbox": {
           "style": "light"
          },
          "paper_bgcolor": "white",
          "plot_bgcolor": "#E5ECF6",
          "polar": {
           "angularaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "radialaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "scene": {
           "xaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "yaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "zaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           }
          },
          "shapedefaults": {
           "line": {
            "color": "#2a3f5f"
           }
          },
          "ternary": {
           "aaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "baxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "caxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "title": {
           "x": 0.05
          },
          "xaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          },
          "yaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          }
         }
        },
        "width": 700
       },
       "_py2js_animate": {},
       "_py2js_deleteTraces": {},
       "_py2js_moveTraces": {},
       "_py2js_removeLayoutProps": {},
       "_py2js_removeTraceProps": {},
       "_py2js_restyle": {},
       "_view_count": 0
      }
     },
     "79a61fd995a84866a542584e78df56d1": {
      "buffers": [
       {
        "data": "AAAAAAAAJEAAAAAAAAAmQAAAAAAAAChA",
        "encoding": "base64",
        "path": [
         "_data",
         0,
         "y",
         "value"
        ]
       }
      ],
      "model_module": "plotlywidget",
      "model_module_version": "^4.12.0",
      "model_name": "FigureModel",
      "state": {
       "_config": {
        "plotlyServerURL": "https://plot.ly"
       },
       "_data": [
        {
         "name": "(0, 'a')",
         "showlegend": true,
         "type": "box",
         "uid": "1fa6ad97-f9a4-4da3-841b-66b3f4beb921",
         "y": {
          "dtype": "float64",
          "shape": [
           3
          ],
          "value": {}
         }
        }
       ],
       "_js2py_layoutDelta": {},
       "_js2py_pointsCallback": {},
       "_js2py_relayout": {},
       "_js2py_restyle": {},
       "_js2py_traceDeltas": {},
       "_js2py_update": {},
       "_last_layout_edit_id": 3,
       "_last_trace_edit_id": 3,
       "_layout": {
        "height": 350,
        "legend": {
         "orientation": "h",
         "traceorder": "normal",
         "x": 1,
         "xanchor": "right",
         "y": 1.02,
         "yanchor": "bottom"
        },
        "margin": {
         "b": 30,
         "l": 30,
         "r": 30,
         "t": 30
        },
        "template": {
         "data": {
          "bar": [
           {
            "error_x": {
             "color": "#2a3f5f"
            },
            "error_y": {
             "color": "#2a3f5f"
            },
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "bar"
           }
          ],
          "barpolar": [
           {
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "barpolar"
           }
          ],
          "carpet": [
           {
            "aaxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "baxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "type": "carpet"
           }
          ],
          "choropleth": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "choropleth"
           }
          ],
          "contour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "contour"
           }
          ],
          "contourcarpet": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "contourcarpet"
           }
          ],
          "heatmap": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmap"
           }
          ],
          "heatmapgl": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmapgl"
           }
          ],
          "histogram": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "histogram"
           }
          ],
          "histogram2d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2d"
           }
          ],
          "histogram2dcontour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2dcontour"
           }
          ],
          "mesh3d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "mesh3d"
           }
          ],
          "parcoords": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "parcoords"
           }
          ],
          "pie": [
           {
            "automargin": true,
            "type": "pie"
           }
          ],
          "scatter": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter"
           }
          ],
          "scatter3d": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter3d"
           }
          ],
          "scattercarpet": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattercarpet"
           }
          ],
          "scattergeo": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergeo"
           }
          ],
          "scattergl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergl"
           }
          ],
          "scattermapbox": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattermapbox"
           }
          ],
          "scatterpolar": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolar"
           }
          ],
          "scatterpolargl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolargl"
           }
          ],
          "scatterternary": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterternary"
           }
          ],
          "surface": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "surface"
           }
          ],
          "table": [
           {
            "cells": {
             "fill": {
              "color": "#EBF0F8"
             },
             "line": {
              "color": "white"
             }
            },
            "header": {
             "fill": {
              "color": "#C8D4E3"
             },
             "line": {
              "color": "white"
             }
            },
            "type": "table"
           }
          ]
         },
         "layout": {
          "annotationdefaults": {
           "arrowcolor": "#2a3f5f",
           "arrowhead": 0,
           "arrowwidth": 1
          },
          "coloraxis": {
           "colorbar": {
            "outlinewidth": 0,
            "ticks": ""
           }
          },
          "colorscale": {
           "diverging": [
            [
             0,
             "#8e0152"
            ],
            [
             0.1,
             "#c51b7d"
            ],
            [
             0.2,
             "#de77ae"
            ],
            [
             0.3,
             "#f1b6da"
            ],
            [
             0.4,
             "#fde0ef"
            ],
            [
             0.5,
             "#f7f7f7"
            ],
            [
             0.6,
             "#e6f5d0"
            ],
            [
             0.7,
             "#b8e186"
            ],
            [
             0.8,
             "#7fbc41"
            ],
            [
             0.9,
             "#4d9221"
            ],
            [
             1,
             "#276419"
            ]
           ],
           "sequential": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ],
           "sequentialminus": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ]
          },
          "colorway": [
           "#1f77b4",
           "#ff7f0e",
           "#2ca02c",
           "#dc3912",
           "#9467bd",
           "#8c564b",
           "#e377c2",
           "#7f7f7f",
           "#bcbd22",
           "#17becf"
          ],
          "font": {
           "color": "#2a3f5f"
          },
          "geo": {
           "bgcolor": "white",
           "lakecolor": "white",
           "landcolor": "#E5ECF6",
           "showlakes": true,
           "showland": true,
           "subunitcolor": "white"
          },
          "hoverlabel": {
           "align": "left"
          },
          "hovermode": "closest",
          "mapbox": {
           "style": "light"
          },
          "paper_bgcolor": "white",
          "plot_bgcolor": "#E5ECF6",
          "polar": {
           "angularaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "radialaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "scene": {
           "xaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "yaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "zaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           }
          },
          "shapedefaults": {
           "line": {
            "color": "#2a3f5f"
           }
          },
          "ternary": {
           "aaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "baxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "caxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "title": {
           "x": 0.05
          },
          "xaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          },
          "yaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          }
         }
        },
        "width": 700
       },
       "_py2js_animate": {},
       "_py2js_deleteTraces": {},
       "_py2js_moveTraces": {},
       "_py2js_removeLayoutProps": {},
       "_py2js_removeTraceProps": {},
       "_py2js_restyle": {},
       "_view_count": 0
      }
     },
     "89915dfe9c2b4c91a324caa8d4969786": {
      "buffers": [
       {
        "data": "AAAAAAAAJEAAAAAAAAAmQAAAAAAAAChA",
        "encoding": "base64",
        "path": [
         "_data",
         0,
         "y",
         "value"
        ]
       },
       {
        "data": "AAAAAAAAKkAAAAAAAAAsQAAAAAAAACpAAAAAAAAAKEAAAAAAAAAmQAAAAAAAACRA",
        "encoding": "base64",
        "path": [
         "_data",
         1,
         "y",
         "value"
        ]
       }
      ],
      "model_module": "plotlywidget",
      "model_module_version": "^4.12.0",
      "model_name": "FigureModel",
      "state": {
       "_config": {
        "plotlyServerURL": "https://plot.ly"
       },
       "_data": [
        {
         "name": "0",
         "showlegend": true,
         "type": "box",
         "uid": "e0541b76-ce8c-45e1-8a1e-68e4c5921079",
         "y": {
          "dtype": "float64",
          "shape": [
           3
          ],
          "value": {}
         }
        },
        {
         "name": "1",
         "showlegend": true,
         "type": "box",
         "uid": "a9166b36-beee-4861-9054-495819dcb9ef",
         "y": {
          "dtype": "float64",
          "shape": [
           6
          ],
          "value": {}
         }
        }
       ],
       "_js2py_layoutDelta": {},
       "_js2py_pointsCallback": {},
       "_js2py_relayout": {},
       "_js2py_restyle": {},
       "_js2py_traceDeltas": {},
       "_js2py_update": {},
       "_last_layout_edit_id": 4,
       "_last_trace_edit_id": 4,
       "_layout": {
        "height": 350,
        "legend": {
         "orientation": "h",
         "traceorder": "normal",
         "x": 1,
         "xanchor": "right",
         "y": 1.02,
         "yanchor": "bottom"
        },
        "margin": {
         "b": 30,
         "l": 30,
         "r": 30,
         "t": 30
        },
        "template": {
         "data": {
          "bar": [
           {
            "error_x": {
             "color": "#2a3f5f"
            },
            "error_y": {
             "color": "#2a3f5f"
            },
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "bar"
           }
          ],
          "barpolar": [
           {
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "barpolar"
           }
          ],
          "carpet": [
           {
            "aaxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "baxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "type": "carpet"
           }
          ],
          "choropleth": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "choropleth"
           }
          ],
          "contour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "contour"
           }
          ],
          "contourcarpet": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "contourcarpet"
           }
          ],
          "heatmap": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmap"
           }
          ],
          "heatmapgl": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmapgl"
           }
          ],
          "histogram": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "histogram"
           }
          ],
          "histogram2d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2d"
           }
          ],
          "histogram2dcontour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2dcontour"
           }
          ],
          "mesh3d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "mesh3d"
           }
          ],
          "parcoords": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "parcoords"
           }
          ],
          "pie": [
           {
            "automargin": true,
            "type": "pie"
           }
          ],
          "scatter": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter"
           }
          ],
          "scatter3d": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter3d"
           }
          ],
          "scattercarpet": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattercarpet"
           }
          ],
          "scattergeo": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergeo"
           }
          ],
          "scattergl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergl"
           }
          ],
          "scattermapbox": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattermapbox"
           }
          ],
          "scatterpolar": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolar"
           }
          ],
          "scatterpolargl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolargl"
           }
          ],
          "scatterternary": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterternary"
           }
          ],
          "surface": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "surface"
           }
          ],
          "table": [
           {
            "cells": {
             "fill": {
              "color": "#EBF0F8"
             },
             "line": {
              "color": "white"
             }
            },
            "header": {
             "fill": {
              "color": "#C8D4E3"
             },
             "line": {
              "color": "white"
             }
            },
            "type": "table"
           }
          ]
         },
         "layout": {
          "annotationdefaults": {
           "arrowcolor": "#2a3f5f",
           "arrowhead": 0,
           "arrowwidth": 1
          },
          "coloraxis": {
           "colorbar": {
            "outlinewidth": 0,
            "ticks": ""
           }
          },
          "colorscale": {
           "diverging": [
            [
             0,
             "#8e0152"
            ],
            [
             0.1,
             "#c51b7d"
            ],
            [
             0.2,
             "#de77ae"
            ],
            [
             0.3,
             "#f1b6da"
            ],
            [
             0.4,
             "#fde0ef"
            ],
            [
             0.5,
             "#f7f7f7"
            ],
            [
             0.6,
             "#e6f5d0"
            ],
            [
             0.7,
             "#b8e186"
            ],
            [
             0.8,
             "#7fbc41"
            ],
            [
             0.9,
             "#4d9221"
            ],
            [
             1,
             "#276419"
            ]
           ],
           "sequential": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ],
           "sequentialminus": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ]
          },
          "colorway": [
           "#1f77b4",
           "#ff7f0e",
           "#2ca02c",
           "#dc3912",
           "#9467bd",
           "#8c564b",
           "#e377c2",
           "#7f7f7f",
           "#bcbd22",
           "#17becf"
          ],
          "font": {
           "color": "#2a3f5f"
          },
          "geo": {
           "bgcolor": "white",
           "lakecolor": "white",
           "landcolor": "#E5ECF6",
           "showlakes": true,
           "showland": true,
           "subunitcolor": "white"
          },
          "hoverlabel": {
           "align": "left"
          },
          "hovermode": "closest",
          "mapbox": {
           "style": "light"
          },
          "paper_bgcolor": "white",
          "plot_bgcolor": "#E5ECF6",
          "polar": {
           "angularaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "radialaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "scene": {
           "xaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "yaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "zaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           }
          },
          "shapedefaults": {
           "line": {
            "color": "#2a3f5f"
           }
          },
          "ternary": {
           "aaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "baxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "caxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "title": {
           "x": 0.05
          },
          "xaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          },
          "yaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          }
         }
        },
        "width": 700
       },
       "_py2js_animate": {},
       "_py2js_deleteTraces": {},
       "_py2js_moveTraces": {},
       "_py2js_removeLayoutProps": {},
       "_py2js_removeTraceProps": {},
       "_py2js_restyle": {},
       "_view_count": 0
      }
     },
     "93ddeb7c978d49de996a76faa04701cc": {
      "buffers": [
       {
        "data": "AAAAAAAAJEAAAAAAAAAmQAAAAAAAAChA",
        "encoding": "base64",
        "path": [
         "_data",
         0,
         "x",
         "value"
        ]
       },
       {
        "data": "AAAAAAAAKkAAAAAAAAAsQAAAAAAAACpAAAAAAAAAKEAAAAAAAAAmQAAAAAAAACRA",
        "encoding": "base64",
        "path": [
         "_data",
         1,
         "x",
         "value"
        ]
       }
      ],
      "model_module": "plotlywidget",
      "model_module_version": "^4.12.0",
      "model_name": "FigureModel",
      "state": {
       "_config": {
        "plotlyServerURL": "https://plot.ly"
       },
       "_data": [
        {
         "name": "0",
         "opacity": 0.75,
         "showlegend": true,
         "type": "histogram",
         "uid": "bcc86c80-120a-4970-a4b2-cbee900c6043",
         "x": {
          "dtype": "float64",
          "shape": [
           3
          ],
          "value": {}
         }
        },
        {
         "name": "1",
         "opacity": 0.75,
         "showlegend": true,
         "type": "histogram",
         "uid": "ff85ebe1-0dcb-4f0a-a6ee-7d45aad5accf",
         "x": {
          "dtype": "float64",
          "shape": [
           6
          ],
          "value": {}
         }
        }
       ],
       "_js2py_layoutDelta": {},
       "_js2py_pointsCallback": {},
       "_js2py_relayout": {},
       "_js2py_restyle": {},
       "_js2py_traceDeltas": {},
       "_js2py_update": {},
       "_last_layout_edit_id": 5,
       "_last_trace_edit_id": 5,
       "_layout": {
        "barmode": "overlay",
        "height": 350,
        "legend": {
         "orientation": "h",
         "traceorder": "normal",
         "x": 1,
         "xanchor": "right",
         "y": 1.02,
         "yanchor": "bottom"
        },
        "margin": {
         "b": 30,
         "l": 30,
         "r": 30,
         "t": 30
        },
        "template": {
         "data": {
          "bar": [
           {
            "error_x": {
             "color": "#2a3f5f"
            },
            "error_y": {
             "color": "#2a3f5f"
            },
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "bar"
           }
          ],
          "barpolar": [
           {
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "barpolar"
           }
          ],
          "carpet": [
           {
            "aaxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "baxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "type": "carpet"
           }
          ],
          "choropleth": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "choropleth"
           }
          ],
          "contour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "contour"
           }
          ],
          "contourcarpet": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "contourcarpet"
           }
          ],
          "heatmap": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmap"
           }
          ],
          "heatmapgl": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmapgl"
           }
          ],
          "histogram": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "histogram"
           }
          ],
          "histogram2d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2d"
           }
          ],
          "histogram2dcontour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2dcontour"
           }
          ],
          "mesh3d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "mesh3d"
           }
          ],
          "parcoords": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "parcoords"
           }
          ],
          "pie": [
           {
            "automargin": true,
            "type": "pie"
           }
          ],
          "scatter": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter"
           }
          ],
          "scatter3d": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter3d"
           }
          ],
          "scattercarpet": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattercarpet"
           }
          ],
          "scattergeo": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergeo"
           }
          ],
          "scattergl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergl"
           }
          ],
          "scattermapbox": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattermapbox"
           }
          ],
          "scatterpolar": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolar"
           }
          ],
          "scatterpolargl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolargl"
           }
          ],
          "scatterternary": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterternary"
           }
          ],
          "surface": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "surface"
           }
          ],
          "table": [
           {
            "cells": {
             "fill": {
              "color": "#EBF0F8"
             },
             "line": {
              "color": "white"
             }
            },
            "header": {
             "fill": {
              "color": "#C8D4E3"
             },
             "line": {
              "color": "white"
             }
            },
            "type": "table"
           }
          ]
         },
         "layout": {
          "annotationdefaults": {
           "arrowcolor": "#2a3f5f",
           "arrowhead": 0,
           "arrowwidth": 1
          },
          "coloraxis": {
           "colorbar": {
            "outlinewidth": 0,
            "ticks": ""
           }
          },
          "colorscale": {
           "diverging": [
            [
             0,
             "#8e0152"
            ],
            [
             0.1,
             "#c51b7d"
            ],
            [
             0.2,
             "#de77ae"
            ],
            [
             0.3,
             "#f1b6da"
            ],
            [
             0.4,
             "#fde0ef"
            ],
            [
             0.5,
             "#f7f7f7"
            ],
            [
             0.6,
             "#e6f5d0"
            ],
            [
             0.7,
             "#b8e186"
            ],
            [
             0.8,
             "#7fbc41"
            ],
            [
             0.9,
             "#4d9221"
            ],
            [
             1,
             "#276419"
            ]
           ],
           "sequential": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ],
           "sequentialminus": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ]
          },
          "colorway": [
           "#1f77b4",
           "#ff7f0e",
           "#2ca02c",
           "#dc3912",
           "#9467bd",
           "#8c564b",
           "#e377c2",
           "#7f7f7f",
           "#bcbd22",
           "#17becf"
          ],
          "font": {
           "color": "#2a3f5f"
          },
          "geo": {
           "bgcolor": "white",
           "lakecolor": "white",
           "landcolor": "#E5ECF6",
           "showlakes": true,
           "showland": true,
           "subunitcolor": "white"
          },
          "hoverlabel": {
           "align": "left"
          },
          "hovermode": "closest",
          "mapbox": {
           "style": "light"
          },
          "paper_bgcolor": "white",
          "plot_bgcolor": "#E5ECF6",
          "polar": {
           "angularaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "radialaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "scene": {
           "xaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "yaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "zaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           }
          },
          "shapedefaults": {
           "line": {
            "color": "#2a3f5f"
           }
          },
          "ternary": {
           "aaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "baxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "caxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "title": {
           "x": 0.05
          },
          "xaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          },
          "yaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          }
         }
        },
        "width": 700
       },
       "_py2js_animate": {},
       "_py2js_deleteTraces": {},
       "_py2js_moveTraces": {},
       "_py2js_removeLayoutProps": {},
       "_py2js_removeTraceProps": {},
       "_py2js_restyle": {},
       "_view_count": 0
      }
     },
     "a1d98ee391a546aab5dee0d48124fe8b": {
      "buffers": [
       {
        "data": "AAAAAAAAJEAAAAAAAAAmQAAAAAAAAChA",
        "encoding": "base64",
        "path": [
         "_data",
         0,
         "y",
         "value"
        ]
       },
       {
        "data": "AAAAAAAAKkAAAAAAAAAsQAAAAAAAACpA",
        "encoding": "base64",
        "path": [
         "_data",
         1,
         "y",
         "value"
        ]
       },
       {
        "data": "AAAAAAAAKEAAAAAAAAAmQAAAAAAAACRA",
        "encoding": "base64",
        "path": [
         "_data",
         2,
         "y",
         "value"
        ]
       },
       {
        "data": "",
        "encoding": "base64",
        "path": [
         "_data",
         3,
         "y",
         "value"
        ]
       }
      ],
      "model_module": "plotlywidget",
      "model_module_version": "^4.12.0",
      "model_name": "FigureModel",
      "state": {
       "_config": {
        "plotlyServerURL": "https://plot.ly"
       },
       "_data": [
        {
         "name": "(0, 'a')",
         "showlegend": true,
         "type": "box",
         "uid": "bff04ef0-65a9-4d0d-affc-c114f58b1c09",
         "y": {
          "dtype": "float64",
          "shape": [
           3
          ],
          "value": {}
         }
        },
        {
         "name": "(1, 'b')",
         "showlegend": true,
         "type": "box",
         "uid": "cfcf055c-4505-408d-b1b8-019b4745e9f1",
         "y": {
          "dtype": "float64",
          "shape": [
           3
          ],
          "value": {}
         }
        },
        {
         "name": "(1, 'c')",
         "showlegend": true,
         "type": "box",
         "uid": "ab247355-ae71-437b-a265-1fa933b14825",
         "y": {
          "dtype": "float64",
          "shape": [
           3
          ],
          "value": {}
         }
        },
        {
         "name": "(1, 'd')",
         "showlegend": true,
         "type": "box",
         "uid": "a65f4612-893d-4275-a63c-194d79ff9835",
         "y": {
          "dtype": "float64",
          "shape": [
           0
          ],
          "value": {}
         }
        }
       ],
       "_js2py_layoutDelta": {},
       "_js2py_pointsCallback": {},
       "_js2py_relayout": {},
       "_js2py_restyle": {},
       "_js2py_traceDeltas": {},
       "_js2py_update": {},
       "_last_layout_edit_id": 6,
       "_last_trace_edit_id": 6,
       "_layout": {
        "height": 350,
        "legend": {
         "orientation": "h",
         "traceorder": "normal",
         "x": 1,
         "xanchor": "right",
         "y": 1.02,
         "yanchor": "bottom"
        },
        "margin": {
         "b": 30,
         "l": 30,
         "r": 30,
         "t": 30
        },
        "template": {
         "data": {
          "bar": [
           {
            "error_x": {
             "color": "#2a3f5f"
            },
            "error_y": {
             "color": "#2a3f5f"
            },
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "bar"
           }
          ],
          "barpolar": [
           {
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "barpolar"
           }
          ],
          "carpet": [
           {
            "aaxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "baxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "type": "carpet"
           }
          ],
          "choropleth": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "choropleth"
           }
          ],
          "contour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "contour"
           }
          ],
          "contourcarpet": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "contourcarpet"
           }
          ],
          "heatmap": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmap"
           }
          ],
          "heatmapgl": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmapgl"
           }
          ],
          "histogram": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "histogram"
           }
          ],
          "histogram2d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2d"
           }
          ],
          "histogram2dcontour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2dcontour"
           }
          ],
          "mesh3d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "mesh3d"
           }
          ],
          "parcoords": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "parcoords"
           }
          ],
          "pie": [
           {
            "automargin": true,
            "type": "pie"
           }
          ],
          "scatter": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter"
           }
          ],
          "scatter3d": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter3d"
           }
          ],
          "scattercarpet": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattercarpet"
           }
          ],
          "scattergeo": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergeo"
           }
          ],
          "scattergl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergl"
           }
          ],
          "scattermapbox": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattermapbox"
           }
          ],
          "scatterpolar": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolar"
           }
          ],
          "scatterpolargl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolargl"
           }
          ],
          "scatterternary": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterternary"
           }
          ],
          "surface": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "surface"
           }
          ],
          "table": [
           {
            "cells": {
             "fill": {
              "color": "#EBF0F8"
             },
             "line": {
              "color": "white"
             }
            },
            "header": {
             "fill": {
              "color": "#C8D4E3"
             },
             "line": {
              "color": "white"
             }
            },
            "type": "table"
           }
          ]
         },
         "layout": {
          "annotationdefaults": {
           "arrowcolor": "#2a3f5f",
           "arrowhead": 0,
           "arrowwidth": 1
          },
          "coloraxis": {
           "colorbar": {
            "outlinewidth": 0,
            "ticks": ""
           }
          },
          "colorscale": {
           "diverging": [
            [
             0,
             "#8e0152"
            ],
            [
             0.1,
             "#c51b7d"
            ],
            [
             0.2,
             "#de77ae"
            ],
            [
             0.3,
             "#f1b6da"
            ],
            [
             0.4,
             "#fde0ef"
            ],
            [
             0.5,
             "#f7f7f7"
            ],
            [
             0.6,
             "#e6f5d0"
            ],
            [
             0.7,
             "#b8e186"
            ],
            [
             0.8,
             "#7fbc41"
            ],
            [
             0.9,
             "#4d9221"
            ],
            [
             1,
             "#276419"
            ]
           ],
           "sequential": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ],
           "sequentialminus": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ]
          },
          "colorway": [
           "#1f77b4",
           "#ff7f0e",
           "#2ca02c",
           "#dc3912",
           "#9467bd",
           "#8c564b",
           "#e377c2",
           "#7f7f7f",
           "#bcbd22",
           "#17becf"
          ],
          "font": {
           "color": "#2a3f5f"
          },
          "geo": {
           "bgcolor": "white",
           "lakecolor": "white",
           "landcolor": "#E5ECF6",
           "showlakes": true,
           "showland": true,
           "subunitcolor": "white"
          },
          "hoverlabel": {
           "align": "left"
          },
          "hovermode": "closest",
          "mapbox": {
           "style": "light"
          },
          "paper_bgcolor": "white",
          "plot_bgcolor": "#E5ECF6",
          "polar": {
           "angularaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "radialaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "scene": {
           "xaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "yaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "zaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           }
          },
          "shapedefaults": {
           "line": {
            "color": "#2a3f5f"
           }
          },
          "ternary": {
           "aaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "baxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "caxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "title": {
           "x": 0.05
          },
          "xaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          },
          "yaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          }
         }
        },
        "width": 700
       },
       "_py2js_animate": {},
       "_py2js_deleteTraces": {},
       "_py2js_moveTraces": {},
       "_py2js_removeLayoutProps": {},
       "_py2js_removeTraceProps": {},
       "_py2js_restyle": {},
       "_view_count": 0
      }
     },
     "fd37871bcc874793ba07083a4019fbc3": {
      "buffers": [
       {
        "data": "AAAAAAAAJEAAAAAAAAAmQAAAAAAAAChA",
        "encoding": "base64",
        "path": [
         "_data",
         0,
         "x",
         "value"
        ]
       },
       {
        "data": "AAAAAAAAKkAAAAAAAAAsQAAAAAAAACpA",
        "encoding": "base64",
        "path": [
         "_data",
         1,
         "x",
         "value"
        ]
       },
       {
        "data": "AAAAAAAAKEAAAAAAAAAmQAAAAAAAACRA",
        "encoding": "base64",
        "path": [
         "_data",
         2,
         "x",
         "value"
        ]
       },
       {
        "data": "",
        "encoding": "base64",
        "path": [
         "_data",
         3,
         "x",
         "value"
        ]
       }
      ],
      "model_module": "plotlywidget",
      "model_module_version": "^4.12.0",
      "model_name": "FigureModel",
      "state": {
       "_config": {
        "plotlyServerURL": "https://plot.ly"
       },
       "_data": [
        {
         "name": "(0, 'a')",
         "opacity": 0.75,
         "showlegend": true,
         "type": "histogram",
         "uid": "4975905f-a756-4611-89a5-9c7ae1744815",
         "x": {
          "dtype": "float64",
          "shape": [
           3
          ],
          "value": {}
         }
        },
        {
         "name": "(1, 'b')",
         "opacity": 0.75,
         "showlegend": true,
         "type": "histogram",
         "uid": "43f4ff61-f06e-4ba4-9da8-0dbe4f6f076a",
         "x": {
          "dtype": "float64",
          "shape": [
           3
          ],
          "value": {}
         }
        },
        {
         "name": "(1, 'c')",
         "opacity": 0.75,
         "showlegend": true,
         "type": "histogram",
         "uid": "265a8e4f-c1c4-4120-9217-95abd3c1cc52",
         "x": {
          "dtype": "float64",
          "shape": [
           3
          ],
          "value": {}
         }
        },
        {
         "name": "(1, 'd')",
         "opacity": 0.75,
         "showlegend": true,
         "type": "histogram",
         "uid": "410fa7a5-e933-41c7-9804-947f616077b6",
         "x": {
          "dtype": "float64",
          "shape": [
           0
          ],
          "value": {}
         }
        }
       ],
       "_js2py_layoutDelta": {},
       "_js2py_pointsCallback": {},
       "_js2py_relayout": {},
       "_js2py_restyle": {},
       "_js2py_traceDeltas": {},
       "_js2py_update": {},
       "_last_layout_edit_id": 7,
       "_last_trace_edit_id": 7,
       "_layout": {
        "barmode": "overlay",
        "height": 350,
        "legend": {
         "orientation": "h",
         "traceorder": "normal",
         "x": 1,
         "xanchor": "right",
         "y": 1.02,
         "yanchor": "bottom"
        },
        "margin": {
         "b": 30,
         "l": 30,
         "r": 30,
         "t": 30
        },
        "template": {
         "data": {
          "bar": [
           {
            "error_x": {
             "color": "#2a3f5f"
            },
            "error_y": {
             "color": "#2a3f5f"
            },
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "bar"
           }
          ],
          "barpolar": [
           {
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             }
            },
            "type": "barpolar"
           }
          ],
          "carpet": [
           {
            "aaxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "baxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "type": "carpet"
           }
          ],
          "choropleth": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "choropleth"
           }
          ],
          "contour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "contour"
           }
          ],
          "contourcarpet": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "contourcarpet"
           }
          ],
          "heatmap": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmap"
           }
          ],
          "heatmapgl": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmapgl"
           }
          ],
          "histogram": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "histogram"
           }
          ],
          "histogram2d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2d"
           }
          ],
          "histogram2dcontour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2dcontour"
           }
          ],
          "mesh3d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "mesh3d"
           }
          ],
          "parcoords": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "parcoords"
           }
          ],
          "pie": [
           {
            "automargin": true,
            "type": "pie"
           }
          ],
          "scatter": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter"
           }
          ],
          "scatter3d": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter3d"
           }
          ],
          "scattercarpet": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattercarpet"
           }
          ],
          "scattergeo": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergeo"
           }
          ],
          "scattergl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergl"
           }
          ],
          "scattermapbox": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattermapbox"
           }
          ],
          "scatterpolar": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolar"
           }
          ],
          "scatterpolargl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolargl"
           }
          ],
          "scatterternary": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterternary"
           }
          ],
          "surface": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "surface"
           }
          ],
          "table": [
           {
            "cells": {
             "fill": {
              "color": "#EBF0F8"
             },
             "line": {
              "color": "white"
             }
            },
            "header": {
             "fill": {
              "color": "#C8D4E3"
             },
             "line": {
              "color": "white"
             }
            },
            "type": "table"
           }
          ]
         },
         "layout": {
          "annotationdefaults": {
           "arrowcolor": "#2a3f5f",
           "arrowhead": 0,
           "arrowwidth": 1
          },
          "coloraxis": {
           "colorbar": {
            "outlinewidth": 0,
            "ticks": ""
           }
          },
          "colorscale": {
           "diverging": [
            [
             0,
             "#8e0152"
            ],
            [
             0.1,
             "#c51b7d"
            ],
            [
             0.2,
             "#de77ae"
            ],
            [
             0.3,
             "#f1b6da"
            ],
            [
             0.4,
             "#fde0ef"
            ],
            [
             0.5,
             "#f7f7f7"
            ],
            [
             0.6,
             "#e6f5d0"
            ],
            [
             0.7,
             "#b8e186"
            ],
            [
             0.8,
             "#7fbc41"
            ],
            [
             0.9,
             "#4d9221"
            ],
            [
             1,
             "#276419"
            ]
           ],
           "sequential": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ],
           "sequentialminus": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ]
          },
          "colorway": [
           "#1f77b4",
           "#ff7f0e",
           "#2ca02c",
           "#dc3912",
           "#9467bd",
           "#8c564b",
           "#e377c2",
           "#7f7f7f",
           "#bcbd22",
           "#17becf"
          ],
          "font": {
           "color": "#2a3f5f"
          },
          "geo": {
           "bgcolor": "white",
           "lakecolor": "white",
           "landcolor": "#E5ECF6",
           "showlakes": true,
           "showland": true,
           "subunitcolor": "white"
          },
          "hoverlabel": {
           "align": "left"
          },
          "hovermode": "closest",
          "mapbox": {
           "style": "light"
          },
          "paper_bgcolor": "white",
          "plot_bgcolor": "#E5ECF6",
          "polar": {
           "angularaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "radialaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "scene": {
           "xaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "yaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "zaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           }
          },
          "shapedefaults": {
           "line": {
            "color": "#2a3f5f"
           }
          },
          "ternary": {
           "aaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "baxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "caxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "title": {
           "x": 0.05
          },
          "xaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          },
          "yaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          }
         }
        },
        "width": 700
       },
       "_py2js_animate": {},
       "_py2js_deleteTraces": {},
       "_py2js_moveTraces": {},
       "_py2js_removeLayoutProps": {},
       "_py2js_removeTraceProps": {},
       "_py2js_restyle": {},
       "_view_count": 0
      }
     }
    },
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
